我可以在矩阵上使用 apply 函数获取数组作为输出吗?

Can I get an array as an output using apply function on a matrix?

我有下面的 R 函数

testfun<- function(x)if(sum(x)>15){array(1:8,rep(2,3))} else{ array(8:1,rep(2,3))}

我将此函数应用于矩阵的每一行,如下所示

apply(matrix(1:9,nr=3),1,testfun)

我得到的输出是

     [,1] [,2] [,3]
[1,]    8    8    1
[2,]    7    7    2
[3,]    6    6    3
[4,]    5    5    4
[5,]    4    4    5
[6,]    3    3    6
[7,]    2    2    7
[8,]    1    1    8

但我希望输出是一个多维数组。类似于 -

, , 1, 1

     [,1] [,2]
[1,]    8    6
[2,]    7    5

, , 2, 1

     [,1] [,2]
[1,]    4    2
[2,]    3    1

, , 1, 2

     [,1] [,2]
[1,]    8    6
[2,]    7    5

, , 2, 2

     [,1] [,2]
[1,]    4    2
[2,]    3    1

, , 1, 3

     [,1] [,2]
[1,]    1    3
[2,]    2    4

, , 2, 3

     [,1] [,2]
[1,]    5    7
[2,]    6    8

我可以在 R 中执行此操作而无需自己定义任何函数吗?

我们可以用 replicate

replicate(3, testfun())

我认为 apply 不可能做到这一点。您可以使用 vapply 获得所需的输出,如下所示:

M <- matrix(1:9, nr=3)
vapply(1:nrow(M), function(i) testfun(M[i,]), FUN.VALUE = array(0,rep(2,3)))