2015-11-16 58 views
1

這個問題有點自我解釋,但我應該補充說我不想加載文件。我正在尋找類似append = TRUE的文件來保存.RData文件。我想要做這樣的事情:如何在保存的.RData文件中添加一個向量作爲一行R

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

這裏是一個重複的例子:

# 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) 

錯誤保存(DF,文件= 「mtcars.Rdata」,追加= TRUE) : 對象「真」未找到

+0

'save()'函數是否有一個'append'參數? – ekstroem

+0

@ekstroem顯然不,save()函數確實有附加參數。這就是爲什麼我要求換一種方式。爲了代碼效率,我試圖避免'.csv'格式。 –

回答

1

據我所知,你必須load文件,以使保存的OBJ變化然後再次保存這些對象。您甚至無法查看未加載的對象的名稱,更不用說修改內容。

如果你想要一個單線解決方案,你可以寫一個函數。

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

嗨@Narenda,謝謝你的回答,但我正在尋找一種不會將文件加載到內存中的解決方案。 –

+1

@RafaelPereira在顯示時使用默認的'save',該文件將使用'gzip'算法進行壓縮。 (有關詳細信息,請參閱'?save'。)您將無法以有意義的方式修改壓縮文件,而至少不會對其進行解壓縮。即使'ascii = T',數據幀當然也不會按行順序保存(R通常喜歡列順序),所以「添加一行」相當複雜。我99%肯定這個答案是你唯一容易的選擇。 – Gregor

+0

如果您想輕鬆追加行,那麼CSV或TSV就是您的朋友。如果您想快速且便攜地閱讀和書寫,可能需要查看[羽毛](https://blog.rstudio.org/2016/03/29/feather/)。 – Gregor

相關問題