我想在矩陣的一個邊界(在我的示例中爲列)上應用函數。問題是該函數返回矩陣,並且apply
將其轉換爲向量,以便它返回一個矩陣。我的目標是獲得三維數組。這裏是例子(注意matrix()
不感興趣的功能,只是一個例子):從矩陣轉換爲向量的輸出應用
x <- matrix(1:12, 4, 3)
apply(x, 2, matrix, nrow = 2, ncol = 2)
輸出是完全一樣的輸入。我有非常沉悶的解決方案:
library(abind)
abind2 <- function (x, ...)
abind(x, ..., along = dim(x) + 1)
apply(x, 2, list) %>%
lapply(unlist) %>%
lapply(matrix, nrow = 2, ncol = 2) %>%
do.call(what = 'abind2')
我相信肯定存在比這更好的東西。某些東西不包括list()
ing和unlist()
列。
編輯: 此外,該解決方案應該準備容易適用於具有的MARGIN
任何選擇哪種我的解決方案是不屬於任何一維數組。例如,我想返回4維數組。
x <- array(1:24, c(4,3,2))
apply(x, 2:3, list) %>%
lapply(unlist) %>%
lapply(matrix, nrow = 2, ncol = 2) %>%
do.call(what = 'abind2')
與第一個示例相同 –
'abind :: abind()' –
另請參閱[此問題](http://stackoverflow.com/q/13811133/4137985) – Cath