
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

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 <aleleich@uol.com.br> 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 R-br@listas.c3sl.ufpr.br 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.

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 <beniltoncarvalho@gmail.com>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 <aleleich@uol.com.br> 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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.

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 <aleleich@uol.com.br>
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 <beniltoncarvalho@gmail.com
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 <aleleich@uol.com.br> 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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/

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 <mcz.fea@gmail.com> 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 <aleleich@uol.com.br>
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 <beniltoncarvalho@gmail.com> 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 <aleleich@uol.com.br> 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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.

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 <beniltoncarvalho@gmail.com>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 <mcz.fea@gmail.com> 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 <aleleich@uol.com.br>
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 <beniltoncarvalho@gmail.com> 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 <aleleich@uol.com.br> 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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.

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 <aleleich@uol.com.br> 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 <beniltoncarvalho@gmail.com> 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 <mcz.fea@gmail.com> 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 <aleleich@uol.com.br>
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 <beniltoncarvalho@gmail.com> 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 <aleleich@uol.com.br> 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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.

Obrigado, Benilton, está claro. Não deve ser coincidência não haver no save a opção append (como há em write.table, etc)... Abraço, Alexandre Em 4 de abril de 2013 13:54, Benilton Carvalho <beniltoncarvalho@gmail.com>escreveu:
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 <aleleich@uol.com.br> 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 < beniltoncarvalho@gmail.com> 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 <mcz.fea@gmail.com> 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 <aleleich@uol.com.br>
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 <beniltoncarvalho@gmail.com> 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 <aleleich@uol.com.br> 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 > R-br@listas.c3sl.ufpr.br > 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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 R-br@listas.c3sl.ufpr.br 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.
participantes (3)
-
Alexandre Ribeiro Leichsenring
-
Benilton Carvalho
-
Manoel Galdino