<div dir="ltr">Olá alexandre,<div><br></div><div style>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.</div>
<div style><br></div><div style>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...</div>
<div style><br></div><div style>Eu imagino alguma coisa assim:</div><div style><br></div><div style><span style="color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify;background-color:rgb(248,248,248)">library(sqldf)</span><br style="color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify;background-color:rgb(248,248,248)">
<span style="color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify;background-color:rgb(248,248,248)">f1 <- file(“bigdf1.csv”)</span></div><div style>
f2 <- file(<span style="color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify;background-color:rgb(248,248,248)">“bigdf2.csv”)</span></div><div style>
<br style="color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify;background-color:rgb(248,248,248)"><span style="color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify;background-color:rgb(248,248,248)">bigdf <- sqldf(</span></div>
<div style><span style="color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify;background-color:rgb(248,248,248)"> “select * from f1 join f2 on key.f1 = key.f2</span><span style="background-color:rgb(248,248,248);color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify">”, dbname = tempfile(), file.format = list(header = T, row.names = F))) </span></div>
<div style><span style="background-color:rgb(248,248,248);color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify"><br></span></div><div style><span style="background-color:rgb(248,248,248);color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify">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!</span></div>
<div style><span style="background-color:rgb(248,248,248);color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify"><br></span></div><div style><span style="background-color:rgb(248,248,248);color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify">Outra possibilidade é o usar o pacote ff.</span></div>
<div style><span style="background-color:rgb(248,248,248);color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify"><br></span></div><div style><span style="background-color:rgb(248,248,248);color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify">abç</span></div>
<div style><span style="background-color:rgb(248,248,248);color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify">M</span></div><div style><span style="background-color:rgb(248,248,248);color:rgb(85,85,85);font-family:'Lucida Grande',sans-serif;font-size:13px;line-height:19.59375px;text-align:justify"><br>
</span></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/4 Alexandre Ribeiro Leichsenring <span dir="ltr"><<a href="mailto:aleleich@uol.com.br" target="_blank">aleleich@uol.com.br</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Obrigado, Benilton,<div><br></div><div>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?</div>
<div><br></div><div>Abraço,</div><div><br></div><div>Alexandre</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">Em 3 de abril de 2013 21:48, 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">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 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" target="_blank">aleleich@uol.com.br</a>> escreveu:<br>
<div><div>> 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 "file.append", vejo<br>
> que o tamanho do arquivo resultante (em bytes) é igual à soma dos tamanhos<br>
> dos arquivos originais. Porém, quando carrego o arquivo concatenado, 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 ctime<br>
> atime exe<br>
> df1.RData 177 FALSE 666 2013-04-03 17:19:39 2013-04-03 16:52:<a href="tel:49%202013-04-03" value="+554920130403" target="_blank">49 2013-04-03</a><br>
> 16:52:49 no<br>
><br>
>> <a href="http://file.info" target="_blank">file.info</a>("df2.RData")<br>
> size isdir mode mtime ctime<br>
> atime exe<br>
> df2.RData 197 FALSE 666 2013-04-03 17:19:39 2013-04-03 16:52:50 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 ctime<br>
> atime exe<br>
> df.RData 374 FALSE 666 2013-04-03 17:19:39 2013-04-03 16:56:50 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>
</div></div>> _______________________________________________<br>
> R-br mailing list<br>
> <a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">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" target="_blank">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>
</blockquote></div><br></div>
<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></blockquote></div><br><br clear="all"><div><br></div>-- <br>
Manoel Galdino<br><a href="https://sites.google.com/site/galdinomcz/" target="_blank">https://sites.google.com/site/galdinomcz/</a><br>
</div>