2

私は次の行列を持っています:

m = matrix(c(1:12), nrow=4)
p = matrix(c(2,7,11), nrow=1)

mとの各列ごとに、 の列の値よりも小さいp列の値を見つけたいmp

p = 1 6 11 

m = 1 5 9
    2 6 10
    3 7 11
    4 8 12

私はこのようなものを得ることができるように:

ans = m[,] > p[,]

ans = 
    F F F
    T F F
    T T F
    T T T

(または類似のもの)

ベクトルにm[,] > p[,] 設定しようとしましたが、どちらも機能しません。p

4

4 に答える 4

1
m > p[rep(1, 4,),]

p の行 1 を 4 回複製して、同じサイズになり、> 比較を実行できるようにします。

以下を使用して、より一般的にすることができます。

m > p[rep(1, nrow(m),),]

このようにして、p 個の単一行が m 行と同じ回数複製されます。

于 2012-06-19T15:49:36.707 に答える
1

mapply(function(x,y) x > max(y), as.data.frame(m), as.data.frame(p))

于 2012-06-19T15:53:29.857 に答える
0
lapply(1:length(p), function(x) m[p[x] > m[,x],x])
[[1]]
[1] 1

[[2]]
[1] 5 6

[[3]]
[1]  9 10
于 2012-06-19T15:50:23.053 に答える
0

applyの各行に対する等価テストもできますm

> t(apply(m, 1, function(x) x > p))
      [,1]  [,2]  [,3]
[1,] FALSE FALSE FALSE
[2,] FALSE FALSE FALSE
[3,]  TRUE FALSE FALSE
[4,]  TRUE  TRUE  TRUE
> 

あなたの2番目を使用すると、あなたの答えが得られますp

p <- c(1, 6, 11)

> t(apply(m, 1, function(x) x > p))
      [,1]  [,2]  [,3]
[1,] FALSE FALSE FALSE
[2,]  TRUE FALSE FALSE
[3,]  TRUE  TRUE FALSE
[4,]  TRUE  TRUE  TRUE
> 
于 2012-06-19T15:53:57.020 に答える