R语言构建矩阵转置异常、矩阵乘法报非兼容数组错误排查
问题原因与解决方法
1. 矩阵运算报错的核心原因
- R中
*是元素级乘法,要求参与运算的两个矩阵维度完全一致。你用cbind生成的M是1000行 × 2列的结构,转置后得到的A是2行 × 1000列,二者维度不匹配,自然会报非兼容数组错误。 - 如果你需要做矩阵乘法,应该使用
%*%运算符,示例:
# 2×1000 乘 1000×2 得到2×2的运算结果 A %*% M # 1000×2 乘 2×1000 得到1000×1000的运算结果 M %*% A
2. 误以为x2消失的原因
你查看数据的方式不对,导致看不到x2标识,x2实际一直存在:
- 转置后的
A只有2行(对应原M的两列x1、x2)、1000列。tail()函数默认查看对象的最后6行,2行的矩阵用tail()查看会直接返回全部2行,行名会显示x1、x2,不存在消失的情况。如果你是在控制台输出时看不到完整行名,可以主动打印行名验证:
rownames(A)
- 用
rbind(x1,x2)生成的M是2行 × 1000列的结构,行名是x1、x2,列是1000个观测值。tail(M)默认查看最后6列,只会显示列对应的数值,不会重复展示行名,你可以用head(M)查看前几行,就能直接看到x1、x2两个行名:
# 查看rbind生成的M的全部2行,会显示x1、x2标识 head(M, 2)
补充注意点
rbern不是R基础包自带的函数,运行前需要先加载extraDistr包,否则会报错:
# 首次使用先安装 install.packages("extraDistr") # 加载包 library(extraDistr) x1 <- rbern(1000,.5) x2 <- (1-x1)
内容的提问来源于stack exchange,提问作者LoveMYMAth
相关产品推荐
相关产品推荐

