2012-06-18 145 views
8

可能重複:
how to save() with a particular variable name保存對象

我想知道一個簡單的方法是節約R中的物體,使用可變objectName用什麼要保存的對象的名稱。我希望這可以很容易地保存對象,並在文件名中包含它們的名字。

我試圖使用get,但我沒有設法保存該對象的原始對象名稱。

例子:

如果我有所謂的「臨時」的對象,這是我想在目錄「DATADIR」保存。我把對象的名字放在變量「objectName」中。

嘗試1:

objectName<-"temp" 
save(get(objectName), file=paste(dataDir, objectName, ".RData", sep="")) 
load(paste(dataDir, objectName, ".RData", sep="")) 

這不起作用,因爲R期望可以保存對象稱爲get(objectName),而不是這個調用的結果。所以,我試過如下:

嘗試2:

objectName<-"temp" 
object<-get(objectName) 
save(object, file=paste(dataDir, objectName, ".RData", sep="")) 
load(paste(dataDir, objectName, ".RData", sep="")) 

這顯然沒有奏效,因爲[R節省名稱爲「對象」的對象,而不是名稱爲「溫度」。加載後,我有一個「對象」的副本,而不是「臨時」。 (是的,內容相同......但這不是我想要的:))。所以我認爲它應該是有指針的東西。所以嘗試了以下內容:

嘗試3:

objectName<-"temp" 
object<<-get(objectName) 
save(object, file=paste(dataDir, objectName, ".RData", sep="")) 
load(paste(dataDir, objectName, ".RData", sep="")) 

相同的結果,嘗試2。但我不知道我在做什麼,我認爲我做的。

這是什麼解決方案?

回答

12

嘗試save(list=objectName, file=paste(objectName, '.Rdata', sep=''))

的關鍵是list參數save需要字符串列表是對象的名稱保存(而不是通過...傳遞的實際對象)。

+0

這正是我需要的,謝謝! – FBE

+1

你也可以使用'paste0(objectName,'.RData')',這會爲你節省幾個筆畫。 –

1

我發現你的例子很難理解,但我可以想到你想要的兩種可能性。您要麼將文件名保存爲objectName.RDatatemp.RData。這裏是你如何做到既:

objectName<-"temp" 

# This saves the object as "temp.RData" 
save(objectName, file=paste(dataDir, objectName, ".RData", sep="")) 
# Loading it will bring it back with the name objectName, and the value temp 
load(paste(dataDir, 'temp', '.RData', sep='')) 

# This saves the object as "objectName.RData" 
save(objectName, file=paste(dataDir, deparse(substitute(objectName)), ".RData", sep="")) 
# Loading it will bring it back with the name objectName, and the value temp 
load(paste(dataDir, 'objectName', '.RData', sep='')) 

你的所有嘗試返回一個錯誤,因爲你叫get不正確。它應該是get('objectName'),但如果你仔細想想,那會得到和objectName完全一樣的東西。

+0

嗯...我想我的例子不夠清楚。這不是我想要保存對象「ObjectName」,而是保存名爲「temp」的對象。例如; 「temp」是我想要保存的'data.frame'。然後,我想只做'objectName < - 「temp」'並運行例如'save'代碼行。 (原因是我只需要更改對象名稱的值,並且所有保存和加載代碼(以及其他一些內容)都不需要更改) – FBE