[R-br] file.append

Alexandre Ribeiro Leichsenring aleleich em uol.com.br
Quinta Abril 4 13:47:45 BRT 2013


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


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