在R中调用hist(x)时传入矩阵类型输入会发生什么?
R中
hist()函数接受矩阵输入的原因 hist()是R的S3泛型函数,官方文档中提到的「入参x应为向量」是针对其默认实现hist.default()的要求- R的矩阵本质上是附加了dim维度属性的一维向量,所有元素按列优先顺序连续存储,本身具备被强制转换为普通一维向量的基础
hist.default()的内部实现中,会先对输入的x执行强制数值转换操作,等价于先调用as.numeric(x)处理输入:当传入矩阵时,这个操作会自动剥离矩阵的dim属性,把所有元素按列优先展开为一维数值向量,后续的分布统计、绘图逻辑完全和传入普通向量一致
你可以运行以下代码验证该行为:
# 创建2x2测试矩阵 mat <- matrix(c(1,2,3,4), nrow = 2) # 直接传入矩阵绘制直方图 hist(mat) # 和传入展开后的向量得到的结果完全一致 hist(as.numeric(mat))
注意:该自动转换行为不会区分矩阵的多列数据,会把所有列的元素混合在一起统计分布。如果你需要单独为矩阵的每一列绘制直方图,需要手动提取单列作为输入,例如
hist(mat[,1])
内容的提问来源于stack exchange,提问作者jschap1
相关产品推荐
相关产品推荐

