如何将R语言数值矩阵转为布尔矩阵后按列应用合取运算符
R语言:数值矩阵转布尔矩阵并实现列合取运算
1. 数值矩阵转布尔矩阵
这一步你的写法完全正确,直接使用比较运算符即可生成布尔矩阵:
# 构造示例矩阵 x <- matrix(c(0.5, 0.2, 0.1, 0.3), nrow = 2) # 转换为布尔矩阵(元素小于0.4时为TRUE) ind <- x < 0.4
生成的ind矩阵如下:
[,1] [,2] [1,] FALSE TRUE [2,] TRUE TRUE
2. 对布尔矩阵的每列应用合取运算
你之前使用apply(ind, 2, &)无法运行,是因为&是二元运算符,不能直接作为apply的函数参数。要实现列内所有元素的合取逻辑(即只有当列中所有元素都是TRUE时,结果才为TRUE),可以用以下几种实用方法:
方法1:结合apply与all()函数
all()函数专门用于判断向量中所有元素是否为TRUE,完美匹配合取需求:
output <- apply(ind, 2, all)
运行结果:
[1] FALSE TRUE
方法2:用colSums()间接判断
在R中布尔值会被自动转换为数值(TRUE=1,FALSE=0),如果某列的和等于矩阵的行数,说明该列所有元素都是TRUE:
output <- colSums(ind) == nrow(ind)
此方法无需额外调用函数,运行效率较高。
方法3:tidyverse风格的purrr::map_lgl()
如果你习惯使用tidyverse工具链,可以用purrr包的map_lgl()来处理:
library(purrr) # 先将矩阵转为数据框,再逐列应用all() output <- map_lgl(as.data.frame(ind), all)
内容的提问来源于stack exchange,提问作者monotonic
相关产品推荐
相关产品推荐

