创建一个新的嵌套列表元素,它是两个现有嵌套列表元素的组合(在R中)

时间:2013-08-06 15:11:27

标签: r apply netcdf

我正在寻找关于如何从两个现有嵌套列表元素创建新嵌套列表元素的提示。在我正在处理的脚本的当前形式中,我根据输入列表中的元素数创建了一个名为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"

1 个答案:

答案 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了吗?