file.append funciona exatamente para o q vc descreveu: concatenar arquivos *texto* (ou algum binario maluco q nao tenha marca de fim/comeco de arquivo).
Em 4 de abril de 2013 13:47, Alexandre Ribeiro Leichsenring <[email protected]> escreveu: > Interessante, agradeço pelas sugestões. > > O file.append me deu a esperança de fazer essa parte da manipulação sem > carregar os dados na memória. Os dados serão processados em outras > plataformas na etapa seguinte, então os dados definitivamente não > precisariam passar pela memória. > > Mas (desculpem se a pergunta parece tola) para que serve o file.append se > você não consegue acessar o conteúdo adicionado? O curioso é que o > file.append funciona diferente com arquivos csv, ou seja, se faço a > concatenação de dois arquivos csv por file.append e depois importo o arquivo > concatenado, recebo o conteúdo dos dois arquivos concatenados... > > Alexandre > > > > Em 4 de abril de 2013 13:08, Benilton Carvalho <[email protected]> > escreveu: > >> 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. > > > > _______________________________________________ > 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.
