我正在寻找关于如何从两个现有嵌套列表元素创建新嵌套列表元素的提示。在我正在处理的脚本的当前形式中,我根据输入列表中的元素数创建了一个名为tardis的列表,该列表是n个元素长。在示例中,输入列表dataLayers长度为2个元素。
创建tardis后,脚本通过读取1200个netCDF文件中的数据来填充它。 tardis中'mean'和'sd'中的12个元素中的每一个都是地理数据的矩阵,tardis [['data']] [[decade]] [['mean']] [[month]],例如,为12个日历月。当列表完全填充时,我想创建一些派生变量。例如,在下面的代码段中,我想通过添加SNOW和RAIN来创建变量TOTALPRECIP。在这样做的过程中,我想从SNOW + RAIN创建TOTALPRECIP作为tardis中的第三个列表元素,将精确的嵌套结构作为其他两个元素(将它们加在一起并保留结构)。
申请或相关功能是否可行?
begin <- 1901
end <- 1991
dataLayers <- c("SNOW","RAIN")
tardis<-list()
for (i in 1:length(dataLayers)){
tardis[[dataLayers[i]]]<-list('longName'='timeLord','units'='theDr','data'=list())
for (j in seq(begin,end,10)){
tardis[[dataLayers[[i]]]][['data']][[as.character(j)]]<-list('mean'=vector(mode='list',length=12),'sd'=vector(mode='list',length=12))
}
}
#add SNOW AND RAIN
print(names(tardis))
>[1] "SNOW" "RAIN" "TOTALPRECIP"
答案 0 :(得分:0)
以下是使用for
的replicate
循环(请注意,每个expression
的{{1}}值与您在分配部分中的表达式相同replicate
循环)
for
但是,我不确定## This is your inner for-loop, using replicate
inds <- seq(begin, end, 10)
datas <- replicate(length(inds), list('mean'=vector(mode='list',length=12),'sd'=vector(mode='list',length=12))
, simplify=FALSE)
names(datas) <- inds
# This is your outer loop
tardis2 <- replicate(length(dataLayers), list('longName'='timeLord','units'='theDr','data'=datas)
, simplify=FALSE)
names(tardis2) <- dataLayers
# Compare Results
identical(tardis2, tardis)
# [1] TRUE
是否是相关的最佳结构。您考虑过list
了吗?