我们说我有一个列表矩阵:
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
如何将函数应用于列表矩阵中的每个列表并以相同的格式返回数据 - 具有相同维度的列表矩阵?
答案 0 :(得分:1)
从向量或列表中重建矩阵并不昂贵,因为它只在对象上设置dim
属性。所以我会这样做:
res <- matrix(lapply(theList,mean),nrow(theList));
res;
## [,1] [,2]
## [1,] -0.1956084 0.03062223
## [2,] -0.2106935 0.1842444
请注意,虽然上面的结果与双打矩阵完全相同,但它实际上仍然是一个列表矩阵:
str(res);
## List of 4
## $ : num -0.196
## $ : num -0.211
## $ : num 0.0306
## $ : num 0.184
## - attr(*, "dim")= int [1:2] 2 2
答案 1 :(得分:1)
这个怎么样,purrr
中有很多函数用于像你这样的情况下的映射函数,
library(purrr)
apply(theList, 2, map_dbl, mean)
答案 2 :(得分:0)
似乎来自plyr
的这种方法正在发挥作用:
library(plyr)
llply(theList, range)
[,1] [,2]
[1,] Numeric,2 Numeric,2
[2,] Numeric,2 Numeric,2