Com apenas 4 GB de RAM (executando o Windows 10, então faça isso com 2 ou mais 1 GB de forma realista), tive que ter muito cuidado com a alocação.
Eu uso data.table quase exclusivamente.
A função 'fread' permite agrupar informações por nomes de campos na importação; importe apenas os campos realmente necessários para começar. Se você estiver usando a leitura base R, anule as colunas falsas imediatamente após a importação.
Como 42- sugere, sempre que possível, subconfigurarei as colunas imediatamente após importar as informações.
Eu frequentemente rm () objetos do ambiente assim que eles não são mais necessários, por exemplo, na próxima linha depois de usá-los para definir um subconjunto de outra coisa, e chamo gc ().
'fread' e 'fwrite' de data.table podem ser muito rápidos em comparação com as leituras e gravações básicas R.
Como o kpierce8 sugere, quase sempre escrevo tudo fora do ambiente e o luto de volta, mesmo com milhares / centenas de milhares de pequenos arquivos para passar. Isso não apenas mantém o ambiente 'limpo' e mantém a alocação de memória baixa, mas, possivelmente devido à grave falta de RAM disponível, o R tem uma propensão a travar frequentemente no meu computador; com muita frequência. Ter o backup das informações na própria unidade à medida que o código progride em vários estágios significa que não preciso iniciar desde o início, se houver uma falha.
A partir de 2017, acho que os SSDs mais rápidos estão rodando em torno de alguns GB por segundo através da porta M2. Eu tenho um SSD Kingston V300 (550MB / s) realmente básico de 50 GB que eu uso como disco principal (possui Windows e R). Eu mantenho todas as informações em massa em um prato WD barato de 500 GB. Movo os conjuntos de dados para o SSD quando começo a trabalhar neles. Isso, combinado com 'fread'ing e' fwrite'ing, tudo tem funcionado muito bem. Eu tentei usar 'ff', mas prefiro o primeiro. As velocidades de leitura / gravação em 4K podem criar problemas com isso; fazer o backup de um quarto de milhão de arquivos de 1k (no valor de 250 MB) do SSD para o prato pode levar horas. Tanto quanto sei, ainda não existe nenhum pacote R que possa otimizar automaticamente o processo de 'chunkification'; por exemplo, observe quanta RAM um usuário possui, teste as velocidades de leitura / gravação da RAM / todas as unidades conectadas e, em seguida, sugira um protocolo ideal de 'chunkification'. Isso poderia produzir algumas melhorias significativas no fluxo de trabalho / otimizações de recursos; por exemplo, divida-o em ... MB para a ram -> divida-o em ... MB no SSD -> divida-o em ... MB no prato -> divida-o em ... MB na fita. Ele poderia coletar amostras de conjuntos de dados de antemão para fornecer um indicador mais realista para trabalhar.
Muitos dos problemas nos quais trabalhei em R envolvem a formação de pares de combinação e permutação, triplos etc., o que torna a limitação de RAM limitada mais uma limitação, pois elas geralmente se expandem pelo menos exponencialmente em algum momento. Isso me fez focar muita atenção na qualidade, em vez da quantidade de informações inseridas neles, em vez de tentar limpá-las posteriormente, e na sequência de operações na preparação das informações (começando com a operação mais simples e aumentando a complexidade); por exemplo, subconjunto, em seguida, mesclar / unir, formar combinações / permutações etc.
Parece haver alguns benefícios em usar a base R de leitura e gravação em alguns casos. Por exemplo, a detecção de erros no 'fread' é tão boa que pode ser difícil tentar obter informações realmente confusas no R para começar a limpá-las. A base R também parece ser muito mais fácil se você estiver usando Linux. A base R parece funcionar bem no Linux, o Windows 10 usa ~ 20 GB de espaço em disco, enquanto o Ubuntu precisa apenas de alguns GB, a RAM necessária com o Ubuntu é um pouco menor. Mas notei grandes quantidades de avisos e erros ao instalar pacotes de terceiros no (L) Ubuntu. Eu não recomendaria me afastar muito do (L) Ubuntu ou de outras distribuições de estoque com o Linux, pois você pode perder tanta compatibilidade geral que torna o processo quase inútil (acho que a 'unidade' deve ser cancelada no Ubuntu a partir de 2017 )
Espero que parte disso possa ajudar outras pessoas.