在R中如何将矩阵的0/1值转换为TRUE/FALSE,循环方法无效怎么解决
原代码失效原因
你初始创建的x1是数值型矩阵,R要求矩阵内所有元素数据类型统一,因此你在数值矩阵中直接赋值TRUE/FALSE时,逻辑值会被自动强制转换为1/0的数值类型,所以运行后看起来没有变化。
可行实现方法
方法1:向量化逻辑判断(最推荐,无需循环)
直接对整个矩阵做等值判断,返回的结果就是和原矩阵维度一致的逻辑矩阵,1会被转为TRUE,0会被转为FALSE:
x1_logical <- x1 == 1
运行后输出x1_logical的结果为:
[,1] [,2] [1,] TRUE TRUE [2,] FALSE TRUE
调用class(x1_logical)可验证其类型为逻辑矩阵。
方法2:通过类型转换函数实现
使用as.logical()先将矩阵元素转为逻辑型,再恢复原矩阵维度即可:
x1_logical <- matrix(as.logical(x1), nrow = nrow(x1), ncol = ncol(x1))
方法3:循环实现(不推荐,仅做原理演示)
如果需要用循环实现,要先初始化一个逻辑类型的矩阵再赋值,避免类型强制转换:
# 初始化同维度的空逻辑矩阵 x1_logical <- matrix(logical(), nrow = 2, ncol = 2) for(i in 1:2){ for(j in 1:2){ x1_logical[i,j] <- x1[i,j] == 1 } }
内容的提问来源于stack exchange,提问作者Jonathan1234
相关产品推荐
相关产品推荐

