我有以下矩阵:
m = matrix(c(1:12), nrow=4)
p = matrix(c(2,7,11), nrow=1)
对于m
和p
的每一列,我想在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 :(得分:1)
m > p[rep(1, 4,),]
将p的第1行复制4次,使它们现在具有相同的大小并且>比较可以做到。
使用以下内容可以更加通用:
m > p[rep(1, nrow(m),),]
这样,p单行被复制为m行的次数。
答案 1 :(得分:1)
mapply(function(x,y) x > max(y), as.data.frame(m), as.data.frame(p))
答案 2 :(得分:0)
lapply(1:length(p), function(x) m[p[x] > m[,x],x])
[[1]]
[1] 1
[[2]]
[1] 5 6
[[3]]
[1] 9 10
答案 3 :(得分: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
>