2

我目前正在使用这个实现:

getVal = function(i, x, margin) {
    rst = ifelse(margin==1, x[i, ], x[, i])
}

即返回x的第i行或列,取决于margin的值。

=== 更新 ===

刚刚意识到我ifelse(x,y,z)在这里使用语句是错误的,因为它返回的值与其第一个参数长度相同。我的实现getVal应该有:

...
rst = if (margin == 1) x[i, ] else x[, i]
...
4

1 回答 1

7

abind::asub()做一些非常像你想做的事情(并且也很好地推广到高维数组)。它的idxdims论点分别对应于你的imargin论点。

library(abind)

(m <- matrix(1:6, ncol=2))
#      [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6

asub(x = m, idx = 2, dims = 1)   # Extract 2nd row
# [1] 2 5

asub(x = m, idx = 2, dims = 2)   # Extract 2nd column
# [1] 4 5 6
于 2012-10-01T22:53:58.937 回答