R

时间:2016-04-28 15:18:39

标签: r list mean

我有一个类似于此question中提出的问题的问题,但是我对列表中的元素方法没有兴趣,而是对列表中元素中的每个索引值感兴趣。

给我这三个清单

ice_2000 = list(seq(1,5,1),seq(6,10,1),seq(11,15,1))
ice_1990 = list(seq(1,5,1),seq(6,10,1),seq(11,15,1))
ice_1980 = list(seq(1,5,1),seq(6,10,1),seq(11,15,1))

我希望每站每天都能找到平均海冰...

x=c(1,2,3) ## years
y=c(1:5)   ## stations

...并将其存储在一个新列表中,格式与上面三个列表中的任何一个相同

这样的东西
[[day]][station]....[n station]
.
.
.
[[n day]][station]....[n station]

我尝试了类似

的内容
average.ice =rep( list(rep(NA, length(y))), 3 ) 

foreach(x=x) %do% {
  foreach(y=y) %do% { 

    average.ice[[x]][y] = mean(c(ice_1980[[x]][y],ice_1990[[x]][y],ice_2000[[x]][y]))

  }
}

但我在输出中得到了NA

average.ice

[[1]]
[1] 1 2 3

[[2]]
[1] NA NA  8

[[3]]
[1] NA NA 13

我哪里错了?申请家庭中有更聪明的方法吗?

2 个答案:

答案 0 :(得分:1)

注意索引。这就是你想要的吗?

yy=c(1,2,3) ## years
st=c(1:5)   ## stations

average.ice =rep( list(rep(NA, length(st))), 3 ) 

library(foreach)

foreach(x=yy) %do% {
  foreach(y=st) %do% { 

    average.ice[[x]][y] = mean(c(ice_1980[[x]][y],ice_1990[[x]][y],ice_2000[[x]][y]))

  }
}

答案 1 :(得分:0)

你可能正在寻找这样的东西:

numOfStations <- length(ice_1980)

average.ice <- lapply(1:numOfStations, 
                      function(i) mapply(mean, ice_1980[[i]], ice_1990[[i]], ice_2000[[i]]))