[R-br] file.append

Manoel Galdino mcz.fea em gmail.com
Quinta Abril 4 11:37:54 BRT 2013


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 em 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 em 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 em 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 em 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 em 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 em 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/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130404/920b294e/attachment.html>


Mais detalhes sobre a lista de discussão R-br