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