[R-br] file.append

Alexandre Ribeiro Leichsenring aleleich em uol.com.br
Quinta Abril 4 14:07:28 BRT 2013


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 em 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 em 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 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.
> >
> >
> >
> > _______________________________________________
> > 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/b4cb7fbe/attachment.html>


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