2015-06-14 15 views
3

從save.ffdf的文檔:生長ffdf數據幀在磁盤上逐漸

使用「save.ffdf」自動地設置的FF「的的終結器的‘’ 向量‘‘關閉’’。這意味着當對象被刪除或R會話關閉時,數據將保留在 磁盤上。數據可以 被刪除或者使用「刪除」或通過除去其中 對象被保存(「DIR」)的目錄。

我想先從一個小的ffdf數據框開始,一次添加一些新數據,然後將它放在磁盤上。所以,我做了一個小實驗:

# in R 
ffiris = as.ffdf(iris) 
save.ffdf(ffiris, dir = "~/Desktop/iris") 

# in bash 
ls ~/Desktop/iris/ 
## ffiris$Petal.Length.ff ffiris$Petal.Width.ff ffiris$Sepal.Length.ff ffiris$Sepal.Width.ff ffiris$Species.ff 

# in R 
# add a new column 
ffiris =transform(ffiris, new1 = rep(99, nrow(iris))) 
rm(ffiris) 

# in bash 
ls ~/Desktop/iris/ 
## ffiris$Petal.Length.ff ffiris$Petal.Width.ff ffiris$Sepal.Length.ff ffiris$Sepal.Width.ff ffiris$Species.ff 

事實證明,它不會自動更新磁盤上的數據FF,當我刪除ffiris。怎麼樣手動保存它?

# in R 
# add a new column 
ffiris =transform(ffiris, new1 = rep(99, nrow(iris))) 
save.ffdf(ffiris, "~/Desktop/iris") 

# in bash 
ls ~/Desktop/iris/ 
## ffiris$Petal.Length.ff ffiris$Petal.Width.ff ffiris$Sepal.Length.ff ffiris$Sepal.Width.ff ffiris$Species.ff 

嗯,仍然沒有運氣。爲什麼?

有關保存之前刪除的文件夾呢?

# in R 
ffiris = as.ffdf(iris) 
unlink("~/Desktop/iris", recursive = TRUE, force = TRUE) 
save.ffdf(ffiris, "~/Desktop/iris", overwrite = TRUE) 
ffiris =transform(ffiris, new1 = rep(99, nrow(iris))) 
unlink("~/Desktop/iris", recursive = TRUE, force = TRUE) 
save.ffdf(ffiris, "~/Desktop/iris", overwrite = TRUE) 

# in bash 
ls ~/Desktop/iris/ 
# ls: /Users/ky/Desktop/iris/: No such file or directory 

即使是陌生人。 即使這一切都有效,它仍然會非常低效。我正在尋找類似的東西:

updateOnDisk(ffiris) 

任何人都可以幫忙嗎?

回答

1

ffffbase提供了內存不足的R向量,但引入了一個引用R語言問題的引用語義。

R是一種函數式編程語言,這意味着功能不改變參數和對象,但返回修改後的副本。在ffbase中,我們以R方式實現函數,即transform返回原始ffdf data.frame的副本。這可以通過查看文件名可以看出:

ffiris = as.ffdf(iris) 
save.ffdf(ffiris, dir = "~/Desktop/iris") 
filename(ffiris) # show contents of ~/Desktop/iris 

ffiris =transform(ffiris, new1 = 99) # this create a copy of the whole data.frame! 
filename(ffiris) 

ffiris$new2 <- ff(rep(99, nrow(iris))) # this creates a new column, but not yet in the right directory 
filename(ffiris) 

save.ffdf(ffiris, dir="~/Desktop/iris", overwrite=TRUE) # this fixes that. 

變換是目前低效添加新的列,因爲它複製整個數據幀(即爲R語義)。這是因爲轉換可能是一個臨時結果,您不會更改原始數據。

在ffbase2我們正在解決這個問題

+0

在最後一行,並'save.ffdf'覆蓋所有現有的載體,或者只是添加一個新的'〜/桌面/ iris'文件夾? – qed