首页 > 解决方案 > 如何将 & 运算符应用于 R 中的布尔矩阵?

问题描述

我有一个矩阵,例如

matrix(sample(c(T,F),12,replace=T),3,4 )

结果是

      [,1]  [,2]  [,3]  [,4]
[1,]  TRUE FALSE FALSE  TRUE
[2,] FALSE  TRUE  TRUE  TRUE
[3,]  TRUE FALSE FALSE FALSE

我正在寻找将AND (&)运算符应用于所有矩阵的最短方法。所以,如果有一个FALSE输出也应该是的。

我知道循环是如何工作的,但我正在寻找一个更短的解决方案

标签: r

解决方案


对于任何矩阵m

> m
      [,1]  [,2]  [,3]  [,4]
[1,]  TRUE  TRUE  TRUE  TRUE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE  TRUE

c(m)将该矩阵展平为向量:

> c(m)
 [1]  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE

因此,要使所有元素的 AND 为 TRUE,所有元素都必须为 TRUE。因此:

> all(c(m))
[1] FALSE

在这种情况下,您可以省略c并直接执行:

> all(m)
[1] FALSE

在更一般的情况下,您可以将函数应用于带有 的向量的元素对Reduce,例如:

> Reduce("&", c(m))
[1] FALSE

它返回m[1,1] & m[1,2] & m[1,3] ... & m[3,4]- 或者可能以其他顺序返回。但是all比较快。


推荐阅读