[R-br] file.append

Alexandre Ribeiro Leichsenring aleleich em uol.com.br
Quinta Abril 4 11:19:40 BRT 2013


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


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