在R中,是否有任何本机函数来获取矩阵的行或列,具体取决于参数?

时间:2012-10-01 22:32:28

标签: r

我目前正在使用此实现:

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

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

=== update ===

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

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

1 个答案:

答案 0 :(得分: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