我有一个矩阵/向量列表,想要应用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 ...
由于
答案 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.call
和rbind
创建矩阵。
outmatrix <- do.call(rbind, outlist)
outmatrix