2015-11-16 3 views
1

La question un peu explicite, mais je devrais ajouter que je ne veux pas charger le fichier. Je cherche quelque chose comme append = TRUE pour enregistrer un fichier .RData. Je veux faire quelque chose comme ceci:Comment ajouter un vecteur en tant que ligne dans un fichier .RData enregistré avec R

save(df, file="mtcars.Rda",append = TRUE)

Voici un exemple reproductible:

# load data 
    data("mtcars") 
    head(mtcars) 

# save original DF 
    save(mtcars, file="mtcars.Rdata") 

# create another DF 
    df <- mtcars 

# append DF to a saved Rdata file 
    save(df, file="mtcars.Rdata",append = TRUE) 

Erreur dans save (df, file = "mtcars.Rdata", append = TRUE) : objet 'TRUE' not found

+0

La fonction 'save()' a-t-elle même un argument 'append'? – ekstroem

+0

@ekstroem Apparemment non, la fonction save() ne possède pas d'argument append. C'est pourquoi je demande une autre solution. J'essaie d'éviter le format '.csv' pour l'efficacité du code. –

Répondre

1

AFAIK, vous devrez load fichier pour faire des changements dans obj sauvé ects, puis sauvegardez ces objets à nouveau. Vous ne pouvez même pas voir les noms des objets stockés sans charger, et encore moins modifier le contenu.

Si vous voulez une solution d'une ligne, vous pouvez écrire une fonction.

appendToFile <- function(newRow, savedFile){ 
    load(savedFile, new.env()) 
    df = rbind(df, newRow) 
    save(df, file = savedFile) 
} 

df <- data.frame(x = 1:5, y = 6:10) 
save(df, file = "file.RData") 
appendToFile(c(50, 100), "file.RData") 

# Check if changes are saved 
load("file.RData") 
tail(df, 3) 
## x y 
##4 4 9 
##5 5 10 
##6 50 100 
+0

Bonjour @Narenda, merci pour votre réponse mais je cherche une solution qui ne charge pas le fichier en mémoire. –

+1

@RafaelPereira Avec le 'save' par défaut que vous montrez, le fichier sera compressé en utilisant l'algorithme' gzip'. (Voir '? Save' pour les détails.) Vous ne serez pas capable de modifier le fichier compressé de manière significative sans au moins le décompresser. Même si 'ascii = T' la trame de données n'est certainement pas sauvegardée dans l'ordre des lignes (R préfère généralement les choses dans l'ordre des colonnes), donc" ajouter une ligne "est plutôt complexe. Je suis sûr à 99% que cette réponse est votre seul choix facile. – Gregor

+0

Si vous souhaitez facilement ajouter des lignes, alors CSV ou TSV sont vos amis. Si vous voulez lire et écrire rapidement et de manière portable, vous pouvez consulter [feather] (https://blog.rstudio.org/2016/03/29/feather/). – Gregor