我目前正在使用此实现:
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]
...
答案 0 :(得分:7)
abind::asub()
做的事情非常类似于你想做的事情(并且也很好地推广到高维数组)。其idx
和dims
参数分别对应于您的i
和margin
参数。
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