矩阵表达式导致错误"需要数值/复杂矩阵/向量参数"?

35
ma=diag(3)+t(da)%*%da

以上R代码,错误信息如下:

Error in t(da) %*% da : requires numeric/complex matrix/vector arguments

da是一个矩阵,长这样:

V45       V46          V47          V48         V49         V50          V51    
1    0.461727059  2.357732985 -1.536932071 -1.34425710  0.893541975 -0.0676913075 -0.86532231
2    0.253022555  1.524473647 -0.588911138 -1.65207275 -0.072255170 -0.5212951533 -1.43686625
3    0.824678362  1.497001189  0.335973892 -0.84027799  0.275289411 -0.2921928001 -0.16277595
4    0.854530787  2.258305198  0.107346531 -1.69194014 -0.841572928 -1.1153931009 -1.939461341
5    1.148286984 -0.232390389 -0.498465734 -0.45728816  0.352889082  0.9868844505 -0.68401129

有人能帮我找出错误吗?


你能展示一个更完整的代码片段吗?我的意思是,da的维度是什么?转置的位置是否重要?例如,您尝试过分解问题并只做第一个 da %% t(da) 或 t(da) %% da 吗? - Nathaniel Payne
@NathanielPayne 是的,我测试过了,两个都不行,出现了同样的错误。另外,我在我的问题中添加了数据。它只是一个简单的矩阵。 - user3505808
3
请用我们可以复制/粘贴的方式给出你的示例?请参考 https://dev59.com/eG025IYBdhLWcg3whGSx 上的一些提示。 - Roman Luštrik
我在这里支持@RomanLuštrik的观点。如果您可以提供创建数据或输入数据的命令以及数据本身,以节省时间,我可以轻松地对其进行操作并得到响应。 - Nathaniel Payne
你的矩阵da是5x6的吗,就像你写的那样?请提供可重现的代码和数据,正如其他人所要求的那样。 - smci
5个回答

59
为了使矩阵乘法正常工作,您需要将数据框(da)转换为矩阵。使用t()计算转置会自动完成此操作:
t(da)%*%as.matrix(da)

但是这会得到一个7x7的矩阵,无法与您正在使用的3x3单位矩阵相加。您是否指的是以下内容:
ma=diag(7)+t(da)%*%as.matrix(da)

如果您对矩阵和数据框之间的区别感到不太自信,可以查看《R入门指南》

1
数据类型也很重要,因此在许多情况下,简单的 as.matrix 是不够的。例如,请参见 R 中的矩阵乘法:需要数字/复杂矩阵/向量参数 - Zheyuan Li

1

由于许多机器学习库使用矩阵乘法,如果您的一个或多个输入属于字符类别,但算法期望数值型,则可能会遇到类似的错误消息。

简而言之,请仔细检查您的输入是否为数值类型。如果不是,则使用as.numeric()将字符转换为数值类型。这对我使用qmap包的fitQmapRQUANT()函数解决了问题。


0

另外,如果您尝试传递数据框而应传递矩阵,则会出现此错误。


-2

矩阵表达式导致错误“需要数字/复杂矩阵/向量参数”?

这个错误发生是因为您正在传递一个字符串向量,由于字符串不能相乘。 matrix(c('1','2','2','1'), nrow=2,ncol=2,byrow=TRUE)->> J

要更正它,请传递数字/复杂参数即可正常工作。 matrix(c(1,2,2,1), nrow=2,ncol=2,byrow=TRUE)->> j

然后使用此代码 t = j %*% t(j) //它将打印矩阵转置和矩阵的乘积。 print(t)


-2

另请参阅此解决方案:https://bugs.r-project.org/bugzilla/show_bug.cgi?id=16607

我无法弄清楚combat出了什么问题,所以我尝试在我的数据集上运行PCA(函数prcomp)。R一直告诉我输入不是矩阵,即使在检查输入对象的类时,它确实说“matrix”和模式“numeric”。在重新启动我的IDE(在我的情况下是Architect)后,使用combat和PCA一切都正常运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接