2012-06-19 118 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 
>