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

时间:2018-08-14 13:22:40

标签: r multidimensional-array apply sapply mapply

我具有以下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中执行此操作而不必自己定义任何函数吗?

2 个答案:

答案 0 :(得分:0)

我们可以使用replicate

replicate(3, testfun())

答案 1 :(得分:0)

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

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