1

我正在寻找有关如何从两个现有嵌套列表元素创建新嵌套列表元素的提示。在我正在处理的脚本的当前形式中,我根据输入列表中的元素数量创建了一个名为 tardis 的列表,它有 n 个元素长。在示例中,输入列表 dataLayers 的长度为 2 个元素。

创建 tardis 后,脚本通过从 1200 个 netCDF 文件中读取数据来填充它。tardis 中 'mean' 和 'sd' 的 12 个元素中的每一个都是地理数据的矩阵,例如 tardis[['data']][[decade]][['mean']][[month]], 12 个日历月。当列表完全填充后,我想创建一些派生变量。例如,在下面的代码片段中,我想通过添加 SNOW 和 RAIN 创建一个变量 TOTALPRECIP。在执行此操作时,我想从 SNOW + RAIN 创建 TOTALPRECIP 作为 tardis 中的第三个列表元素,并具有与其他两个元素完全相同的嵌套结构(将它们加在一起并保留结构)。

这可能与 apply 或其相关功能有关吗?

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"
4

1 回答 1

0

这是您for使用的循环replicate (请注意,expression每个循环的值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


但是,我不确定lists 是否是最好的结构。你考虑过data.frames吗?

于 2013-08-06T15:51:04.940 回答