迭代R和商店列表中的列表

时间:2014-12-11 20:26:18

标签: r list lapply

我有一个矩阵/向量列表,想要应用R函数并将输出存储为数字序列中的列表。举个例子:我有一个向量x,想要计算min,max,median,quantile并在每次迭代时将它存储在一个列表中,

outlist <- vector("list", 10)

for(p in seq(from=5, to=50, by=5))  {

  x <- c(rnorm(20)) 

  min <- min(x)
  max <- max(x)
  median <- median(x)
  quant <- quantile(x)

  outlist[[p]] <- list(c(min=min,max=max,median=median,quant=quant))

  print(p)
  }

上面的代码工作正常,除了输出并且有很多“null”值。请参阅下面的程序输出,注意1到4是空的,只有在第5次迭代中我们才开始获取列表输出。这重复所有迭代。能告诉我如何避免输出中的空值。

以下是我的问题。如何确保不存在所有空值,并且只存在迭代中的序列号(p = 5,10,15,...,50)。

[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
[[5]][[1]]
       min        max     median   quant.0%  quant.25%  quant.50%  quant.75% quant.100% 
-2.1058435  2.8461767 -0.5227028 -2.1058435 -1.1500056 -0.5227028  0.1645680  2.8461767 

另外,如何为列表创建矩阵(向量)输出,其中行名称为序列示例?

       min        max     median   quant.0%  quant.25%  quant.50%  quant.75% quant.100% 
5  -2.1058435  2.8461767 -0.5227028 -2.1058435 -1.1500056 -0.5227028  0.1645680  2.8461767 
10 -0.7709128  2.2872216  0.1808006 -0.7709128 -0.1501660  0.1808006  0.8250730  2.2872216 
15 -2.3748713  2.0360717  0.2638579 -2.3748713 -0.2631081  0.2638579  0.6446657  2.0360717

and so on ...

由于

1 个答案:

答案 0 :(得分:1)

您可以使用foreach包构建列表。 foreach函数会返回一个列表,然后您可以指定其名称。

library(foreach)

vectorNames <- seq(from=5, to=50, by=5)

outlist <- foreach(p = vectorNames) %do% {

  x <- c(rnorm(20)) 

  min <- min(x)
  max <- max(x)
  median <- median(x)
  quant <- quantile(x)

  return(c(min=min,max=max,median=median,quant=quant))
}

names(outlist) <- vectorNames

然后,您可以使用do.callrbind创建矩阵。

outmatrix <- do.call(rbind, outlist)
outmatrix