我每年都有一些变量,我想保存到磁盘以便以后检索。例子:
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)
然后稍后我想恢复这些变量,只用一年(例如第二年):
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 和第二年 d <- 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”,也避免跟踪需要哪些文件等等。
我知道这个例子很简单,但真正的脚本必须在年份之间跳跃,在其间创建和导出情节,等等。我希望以一种强大的方式自动化所有这些。再次为混乱感到抱歉。经过几个小时的尝试解决这个问题,我意识到我可能太累了,无法以最好的方式解释这个问题。