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@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@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@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@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.