Carregue um arquivo por vez e salve o conteudo num formato proprio para grandes volumes: NetCDF, HDF5.
Uma alternativa e': 1) ler o primeiro arquivo 2) escrever o conteudo como um txt (separado por tabulacao, por exemplo) 3) remover o obj da memoria 4) ler o segundo arquivo 5) escrever o conteudo no mesmo arquivo q o passo 2 (use o argumento append=TRUE do write.table) 6) remova o obj da memoria 7) use ff ou bigmemory (ou sqldf) para "reimportar" o conteudo em memoria E' uma alternativa mais lenta, mas tambem funciona. b Em 4 de abril de 2013 11:37, Manoel Galdino <[email protected]> escreveu: > Olá alexandre, > > Eu não sei o que o file.append faz, mas imagino que por concatenar você quer > dizer algo como merge (e não, por exemplo, rbind). Há formas de concatenar > os bancos sem carregar na memória. Mas a questão é se você quer depois > trabalhar no R com os dois bancos juntos, dependendo do que você quer fazer > terá que carregar na memória. > > Uma forma de concatenar os bancos antes de carregar na memória, me parece, é > usando o pacote sqldf. Mas no final ele vai colocar os dois bancos > concatenados na memória, então não parece que vai resolver seu problema. De > todo modo... > > Eu imagino alguma coisa assim: > > library(sqldf) > f1 <- file(“bigdf1.csv”) > f2 <- file(“bigdf2.csv”) > > bigdf <- sqldf( > “select * from f1 join f2 on key.f1 = key.f2”, dbname = > tempfile(), file.format = list(header = T, row.names = F))) > > Dessa forma ele carrega os bancos numa base de dados sqlite, executa a query > (no caso, com um join) e retorna o banco para o R. Mas ele retorna para o R! > > Outra possibilidade é o usar o pacote ff. > > abç > M > > > > 2013/4/4 Alexandre Ribeiro Leichsenring <[email protected]> >> >> Obrigado, Benilton, >> >> A questão é exatamente essa, estou tentando evitar carregar os arquivos na >> memória (estou trabalhando com um conjunto de arquivos que somam 50 GB). >> Existe alguma maneira de manipular essa marcação de fim de arquivo? Ou >> alguma outra sugestão para concatenar data.frames (com as mesmas variáveis) >> sem precisar carregar os dados na memória? >> >> Abraço, >> >> Alexandre >> >> >> >> >> >> Em 3 de abril de 2013 21:48, Benilton Carvalho >> <[email protected]> escreveu: >>> >>> O que acontece e' q o arquivo final e' sim a concatenacao dos dois... >>> mas o formato possui marcadores de fim de arquivo... e, por isso, >>> concatenar arquivos binarios nao e' uma boa ideia... >>> >>> A estrutura (super-simplificada) interna de um arquivo binario gravado >>> pelo R e': >>> >>> Magic-number #q identifica a validade do arquivo para aquele formato >>> Cabecalhos e outros detalhes >>> CONTEUDO... -> seus dados vem aqui >>> Sinal de fim de arquivo... >>> >>> Dai' ao concatenar via file.append, vc fica com: >>> >>> Magic-number do arquivo1 >>> Cabecalhos e outros detalhes do arquivo1 >>> CONTEUDO do arquivo1 >>> Sinal de fim de arquivo1 >>> Magic-number do arquivo2 >>> Cabecalhos e outros detalhes do arquivo2 >>> CONTEUDO do arquivo2 >>> Sinal de fim de arquivo2 >>> >>> Assim, o tamanho total e' a soma dos dois tamanhos... mas ao comecar a >>> ler o arquivo e chegar em "Sinal de fim de arquivo1", o R pára por ali >>> (afinal, ali e' um comando de "pare de ler, pq aqui eh o fim") e >>> retorna os valores ate' entao obtidos... sem comecar no arquivo2... >>> >>> Se vc quiser de fato combinar ambos os arquivos, o q vc precisa fazer e': >>> >>> obj1 = load("arquivo1.RData") >>> obj2 = load("arquivo2.RData") >>> save(list=c(obj1, obj2), file="arquivo1.RData") >>> >>> Eu entendo pq vc gostaria de algo como file.append (afinal, vc pode >>> nao querer abrir cada um dos arquivos e entao salvar de novo, etc)... >>> mas, este e' o jeito "certo" de se fazer o q vc deseja. >>> >>> b >>> >>> Em 3 de abril de 2013 17:27, Alexandre Ribeiro Leichsenring >>> <[email protected]> escreveu: >>> > Olá a todos, >>> > >>> > Estou tendo dificuldades com a função file.append. >>> > >>> > Quando faço a concatenação de dois arquivos RData usando "file.append", >>> > vejo >>> > que o tamanho do arquivo resultante (em bytes) é igual à soma dos >>> > tamanhos >>> > dos arquivos originais. Porém, quando carrego o arquivo concatenado, >>> > aparece >>> > um objeto contendo somente os elementos do primeiro arquivo: >>> > >>> >> rm(list=ls()) >>> > >>> >> # Criando arquivo 1 >>> >> (df <- data.frame(x = letters[1:5], y = 1:5)) >>> > x y >>> > 1 a 1 >>> > 2 b 2 >>> > 3 c 3 >>> > 4 d 4 >>> > 5 e 5 >>> >> save(df, file = "df1.RData") >>> >> rm(df) >>> > >>> >> # Criando arquivo 2 >>> >> (df <- data.frame(x = LETTERS[1:5], y = 10*(1:5))) >>> > x y >>> > 1 A 10 >>> > 2 B 20 >>> > 3 C 30 >>> > 4 D 40 >>> > 5 E 50 >>> >> save(df, file = "df2.RData") >>> >> rm(df) >>> > >>> >> # Criando uma cópia do arquivo 1 >>> >> file.copy(from = "df1.RData", to = "df.RData", overwrite = T) >>> > [1] TRUE >>> >> >>> >> # Concatenando df2 em df. >>> >> file.append("df.RData", "df2.RData") >>> > [1] TRUE >>> > >>> >> file.info("df1.RData") >>> > size isdir mode mtime >>> > ctime >>> > atime exe >>> > df1.RData 177 FALSE 666 2013-04-03 17:19:39 2013-04-03 16:52:49 >>> > 2013-04-03 >>> > 16:52:49 no >>> > >>> >> file.info("df2.RData") >>> > size isdir mode mtime >>> > ctime >>> > atime exe >>> > df2.RData 197 FALSE 666 2013-04-03 17:19:39 2013-04-03 16:52:50 >>> > 2013-04-03 >>> > 16:52:50 no >>> > >>> >> file.info("df.RData") >>> > size isdir mode mtime >>> > ctime >>> > atime exe >>> > df.RData 374 FALSE 666 2013-04-03 17:19:39 2013-04-03 16:56:50 >>> > 2013-04-03 >>> > 16:56:50 no >>> > >>> >> load("df.RData") >>> >> df >>> > x y >>> > 1 a 1 >>> > 2 b 2 >>> > 3 c 3 >>> > 4 d 4 >>> > 5 e 5 >>> > >>> > Alguém sabe dizer o que está acontecendo? >>> > >>> > Obrigado, >>> > >>> > Alexandre >>> > >>> > _______________________________________________ >>> > R-br mailing list >>> > [email protected] >>> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br >>> > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça >>> > código >>> > mínimo reproduzível. >>> _______________________________________________ >>> R-br mailing list >>> [email protected] >>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br >>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça >>> código mínimo reproduzível. >> >> >> >> _______________________________________________ >> R-br mailing list >> [email protected] >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça >> código mínimo reproduzível. > > > > > -- > Manoel Galdino > https://sites.google.com/site/galdinomcz/ > > _______________________________________________ > R-br mailing list > [email protected] > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código > mínimo reproduzível. _______________________________________________ R-br mailing list [email protected] https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
