[R-br] file.append

Benilton Carvalho beniltoncarvalho em gmail.com
Quarta Abril 3 21:48:34 BRT 2013


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.


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