我如何将列中的函数应用于矩阵列表?例如,我有一个如下所示的列表.
[[1]]
[[1]][[1]]
[,1] [,2] [,3]
[1,] "b" "c" "d"
[2,] "y" "y" "y"
[3,] "z" "z" "z"
[[1]][[2]]
[,1] [,2] [,3]
[1,] "b" "b" "c"
[2,] "c" "d" "d"
[3,] "y" "y" "y"
[4,] "z" "z" "z"
[[2]]
[,1] [,2]
[1,] "y" "z"
Run Code Online (Sandbox Code Playgroud)
这很好用:
apply(p[[1]][[1]],2,gen.fmla,y="q")
[[1]]
log(q) ~ b + y + z
<environment: 0x920732c>
[[2]]
log(q) ~ c + y + z
<environment: 0x912e66c>
[[3]]
log(q) ~ d + y + z
<environment: 0x85b608c>
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何将它应用到列表中.单独使用lapply不起作用,因为它将函数应用于整个矩阵.我试图使用apply和lapply的组合,但无法理解.
要获得更好的答案,您需要提供可重现的示例.要获得问题的一般答案,可以使用lapply两次.例如:
##Create some data
R> l = list()
R> l[[1]] = matrix(rnorm(10), 2); l[[2]] = matrix(rnorm(10), 2)*10
R> L = list()
R> L[[1]] = l; L[[2]] = l
R> f = function(l) lapply(l, apply, 2, sum)
R> lapply(L, f)
[[1]]
[[1]][[1]]
[1] 1.1923 0.5275 0.4957 0.6848 -0.2776
[[1]][[2]]
[1] -13.984 15.435 -16.362 8.799 4.186
<snip>
Run Code Online (Sandbox Code Playgroud)
或使用rapply功能:
#Gives the same as above
R> rapply(L, function(i) apply(i, 2, sum), how="replace")
Run Code Online (Sandbox Code Playgroud)