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