2012-06-19 168 views
1

指定的值更大的我有以下矩陣:查找矩陣的行(由列)比在矩陣或矢量

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

每的mp每一列,我想找到的列中的值m其中小於值的p

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是一個載體,但既不工程。

回答

0
lapply(1:length(p), function(x) m[p[x] > m[,x],x]) 
[[1]] 
[1] 1 

[[2]] 
[1] 5 6 

[[3]] 
[1] 9 10 
1
m > p[rep(1, 4,),] 

複製第4行的第1行,使它們現在具有相同的大小,並且可以完成比較。

它可以由更一般的通過使用:

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

這樣,對單排被複制多次m行。

1

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

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 
> 

每一行我得到你的答案,如果我用你的第二個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 
>