我每年都有一些變量,我想保存到磁盤以便稍後檢索。 例子:把變量放到列表中,然後讓它們回來
Yr.data <- list()
#Year 1
a <- "Year 1"
b <- 72
c <- matrix(1, nrow=2, ncol=2)
Yr.data[[1]] <- list(a=a, b=b, c=c)
#Year 2
a <- "Year 2"
b <- 99
c <- matrix(3, nrow=2, ncol=2)
Yr.data[[2]] <- list(a=a, b=b, c=c)
save (Yr.data, file="Yr_data.Rda")
rm(a,b,c,Yr.data)
再後來我想這些變量回來,只是1年(第二年的示例中):
load("Yr_data.Rda")
# Here I want to "unlist" Yr.data[[2]], so I get a, b, c as separate variables
print(b)
[1] 99
c <- Yr.data[[2]]$C# I know this is a way to do it, but I want it automatically
有一個聰明的辦法來做到這一點?既可以保存變量而不必寫a = a等等,也不用特別指定要變出的變量。我想每年保存的真實數據要複雜得多(空間對象,數據框等)。我認爲解決方案很簡單,但不知何故,我堅持找到它...
謝謝。
/克里斯
更新: 感謝努力幫助,我真的很感激。我意識到問題描述不夠清楚。 對於每一年(和測量點),例如變量b和c(但是每年和測量點具有不同的值)。我需要將這些值保存到磁盤供以後處理。 b例如可以是一個list()或者一個SpatialPolygonsDataFrame [](不知道如何把它放到數據庫中)。 我有其他R腳本來處理變量b和c。複雜性是我想在同一個文件中多次保存「b」。所以,我認爲這是聰明的把它放在一個列表:
Yr.data <- list()
b <- 17
Yr.data[[1]] <- list(b=b)
b <- 42
Yr.data[[2]] <- list(b=b)
b <- Yr.data[[1]]$b # b becomes 17
# Or this, in case I need to analyze the second year
b <- Yr.data[[2]]$b # b becomes 42
此代碼,但我希望能學到更強大的方式來做到這一點的情況下,我在以後添加更多的變量(例如d < - 第一年34和第二年的第< - 43)。
更新2:我很抱歉沒有足夠清楚地解釋。我不想浪費你的時間。讓我最後一次嘗試。
我有一個處理輸入變量a,b,c的R腳本。在我的示例中,這些變量很簡單,但實際上它們是更復雜的對象,如sp :: SpatialPolygonsDataFrame,所以我不能將它們放在數據框中。有時我需要處理一組變量,有時需要處理另一組變量。我認爲這很好的保存這些不同的集作爲列出一個清單,所以如果我想與第一組跑,我在名單列表中選擇第一個列表:
Year.I.need.to.analyze <- 1
getAllVariablesInList(Yr.data[[Year.I.need.to.analyze ]]) # creates a, b, c
result.I.want <- b * c
當我需要分析第二年,我只需要將「Year.I.need.to.analyze」更改爲2並再次運行腳本。我寧願不將每個集合保存在單獨的.Rda文件中,以避免在文件名和目錄上「greping」和「paste():ing」,也避免跟蹤需要哪些文件等等。
我知道這個例子很簡單,但真正的腳本必須在幾年之間跳躍,在兩者之間創建和導出圖表等等。我希望能夠以一種穩健的方式自動化所有這些。 再次抱歉混淆。經過數小時的努力解決這個問題,我意識到我可能太累,不能以最好的方式解釋問題。
'保存(A,B,C,文件= 「Yr1_data.Rda」)'等?我無法確切地告訴你在這裏之後。 – joran
對不起,我應該提到強壯的代碼的原因,我想在一個文件中的所有年份。我需要多年保存數據。 – Chris
我可能會使用一個環境而不是一個列表,但它不會有太大的不同。例如'e < - as.environment(Yr.data,recursive = FALSE); LS(E); E $℃; (e,b);得到(「c」,pos = e)' – GSee