【发布时间】:2016-04-09 20:35:49
【问题描述】:
假设我有一个列表矩阵:
theList <- matrix(list(rnorm(10), rnorm(10), rnorm(10), rnorm(10)), nrow=2, ncol=2)
theList
[,1] [,2]
[1,] Numeric,10 Numeric,10
[2,] Numeric,10 Numeric,10
我想对这个矩阵的每个元素应用一些函数,同时保留原始尺寸。
我发现以下内容适用于 sapply:
apply(theList, 2, sapply, mean)
[,1] [,2]
[1,] 0.5678905 0.0577225
[2,] -0.2708252 0.5045110
但是它不适用于 lapply:
apply(theList, 2, lapply, mean)
[[1]]
[[1]][[1]]
[1] 0.5678905
[[1]][[2]]
[1] -0.2708252
[[2]]
[[2]][[1]]
[1] 0.0577225
[[2]][[2]]
[1] 0.504511
如何将函数应用于列表矩阵中的每个列表,并以相同格式返回数据 - 具有相同维度的列表矩阵?
【问题讨论】:
-
列表矩阵是一种糟糕的数据结构。另外,如果
sapply()工作正常,你为什么还要关心lapply()? -
如果这行得通,对我来说这将是一个足够好的结构。我不想要
sapply,因为它仅限于返回单个值作为输出的函数。lapply更加通用和一致。 -
我想
simplify2array(apply(theList, 2, lapply, mean))会起作用。甚至`dim<-`(lapply(theList, mean), dim(theList)) -
我同意。也不确定是否理解,但也许您想在矩阵的每个单元格中都有列表?如果是,这可以工作
apply(theList, 1:2, function(x) list(sapply(x, mean))) -
@HaddE.Nuff 是的,那些似乎工作。非常感谢。只希望它比那更简单。想知道
plyr在这里是否有任何帮助.. @VincentBonhomme - 一次通话中有两个保证金适用于什么?apply(theList, 1:2, lapply, mean)似乎在工作,但不确定它的作用。