2

私は現在、この実装を使用しています:

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

つまり、margin の値に応じて、x の i 番目の行または列を返します。

===更新===

ifelse(x,y,z)最初の引数と同じ長さの値を返すため、ここでのステ​​ートメントの使用法が間違っていることに気付きました。私の実装には次のgetValものが必要です。

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

1 に答える 1

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
于 2012-10-01T22:53:58.937 に答える