我可以在矩阵上使用 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)))
我有下面的 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)))