【问题标题】:Error: requires numeric/complex matrix/vector arguments when using matrix times vector multiplication错误:使用矩阵时间向量乘法时需要数字/复数矩阵/向量参数
【发布时间】:2018-05-08 13:26:20
【问题描述】:

这是我的代码:

indices <- as.matrix(sapply(cpi_calc[2:nrow(cpi_calc), 1:ncol(cpi_calc)], as.numeric))  
weigths <- as.matrix(sapply(cpi_calc[1, 1:ncol(cpi_calc)], as.numeric))
CPI77_82 <- indices %*% weights

我想用索引矩阵和权重向量计算 CPI。矩阵和向量都在变量窗口中显示为 num。我不知道为什么矩阵乘法不起作用。

Error in indices %*% weights : 
  requires numeric/complex matrix/vector arguments

我知道还有很多其他类似的问题,但我的代码对我来说似乎很好,我尝试了其他类似问题的所有答案。请帮忙! :)

编辑:

 > cpi_calc[2:6, 1:6]
# A tibble: 5 x 6
    X__1   X__2   X__3   X__4   X__5   X__6
   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 100.00 100.00 100.00 100.00 100.00 100.00
2  99.99 100.00 100.07 100.01 100.80 101.59
3  99.52  99.58  99.94 100.01 101.03 101.38
4  99.46  99.44  99.85 100.01 101.03 101.03
5  99.13  99.37  99.79  99.97 101.00 101.82

> t(cpi_calc[1, 1:6])
      [,1]
X__1 0.358
X__2 0.359
X__3 0.060
X__4 0.419
X__5 0.191
X__6 0.296

【问题讨论】:

  • 你能提供一个小的输入样本和想要的结果吗?顺便说一句,你确定你不只是想要 indices * weights 吗?这对于使用权重计算 CPI 是有意义的
  • 嗯,数据很大。索引矩阵为 64x111,权重向量为 111x1,如果有帮助,我可以将数据上传到 google.sheets 吗?
  • 5x6 索引矩阵和 6x1 权重矩阵适用于这个问题。
  • 您得到的错误通常是当其中一个表是 data.frame 时。我看到您的代码使用 as.matrix,但仔细检查 str(indices) 和 str(weights)。
  • 在我的问题中添加了一个示例

标签: r matrix vector error-handling matrix-multiplication


【解决方案1】:

这很好用。您的 cpi_calc 表中必须有一些 NA。试试na.omit(cpi_calc)

cpi_calc <- read.table(text="0.358  0.359   0.06    0.419   0.191   0.296
100 100 100 100 100 100
99.99   100 100.07  100.01  100.8   101.59
99.52   99.58   99.94   100.01  101.03  101.38
99.46   99.44   99.85   100.01  101.03  101.03
99.13   99.37   99.79   99.97   101 101.82",header=FALSE)

as.matrix(cpi_calc[2:6, 1:6]) %*% t(cpi_calc[1, 1:6])
         1
2 168.3000
3 168.9282
4 168.5832
5 168.4024
6 168.4669

【讨论】:

    猜你喜欢
    • 2017-03-12
    • 2019-12-03
    • 2018-06-04
    • 2021-04-25
    • 2021-01-27
    • 2014-05-19
    • 2018-05-28
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多