R语言中1×10与10×1矩阵使用%*%相乘返回NA的原因是什么?
问题原因
- 构造向量的语法错误:R 中拼接多个元素生成向量需要使用
c()函数,你当前使用的圆括号()仅用于调整运算优先级,无法将多个元素组合为合法的向量对象,会直接导致x、y定义失败,甚至对象本身为NA或未生成,执行乘法自然返回NA。 - 若要严格执行矩阵乘法,一维普通向量默认无维度属性,虽然
%*%对普通向量支持点积运算,但如果对象属性异常也可能触发结果异常。
解决方法
方法1:直接计算点积
修正向量定义语法后直接运算即可,%*%可自动适配普通向量的点积计算:
# 正确构造x向量 x <- c(1,-0.00247043,-0.002320707,-0.002170984,-0.003518491,-0.002695014,-0.001871538,-0.002395568,-0.003069322,-0.003817937) # 正确构造y向量 y <- c(6.911842e-06,-6.940286e-06,-3.648303e-06,3.664410e-07,-4.102516e-07,-3.479830e-06,-5.308621e-06,-3.571418e-06,-4.058502e-06,-4.058502e-06) # 执行点积运算 res <- x %*% y
方法2:严格按矩阵规则运算
将向量转为对应维度的矩阵后执行乘法:
# 转为1行10列矩阵 x_mat <- matrix(x, nrow = 1, ncol = 10) # 转为10行1列矩阵 y_mat <- matrix(y, nrow = 10, ncol = 1) # 矩阵乘法 res <- x_mat %*% y_mat
运行以上代码即可得到正确的运算结果,返回值约为7.13481e-06。
内容的提问来源于stack exchange,提问作者Nmgh
相关产品推荐
相关产品推荐

