R语言中,有没有比apply更简洁的方式打印矩阵中的因子水平?
解决方法
最简方案:直接重构矩阵
不用循环,通过向量索引后重新指定维度即可保留矩阵结构,代码最简洁:
matrix(care_type_names[care_types], dim = dim(care_types))
原方法的问题说明
- 直接索引丢失维度:矩阵索引后默认返回扁平化的向量,用
matrix()传入原矩阵的dim参数就能快速恢复二维结构。 apply写法冗余:apply是逐元素循环,效率低于向量操作,而且代码没必要这么复杂。~care_type_names[[.x]]失效原因:apply按元素处理时,传递给lambda的是长度为1的向量(不是单个标量),虽然[[能处理长度1的向量,但更稳妥的写法是~care_type_names[.x]——不过这个方法本身就不如矩阵重构高效。
进阶:模拟因子矩阵
如果需要让矩阵保留因子的编码属性(既显示名称又能做统计操作),可以先把矩阵转为因子向量,再重构为矩阵:
factor_mat <- matrix(factor(care_types, labels = care_type_names), dim = dim(care_types))
这样打印时显示的是care_type_names中的名称,底层还是整数编码,后续分析不受影响。
内容的提问来源于stack exchange,提问作者Mohan
相关产品推荐
相关产品推荐

