【问题标题】:List storing matrices as characters instead of binary R将矩阵存储为字符而不是二进制 R
【发布时间】:2020-09-19 03:54:08
【问题描述】:

您好,我创建了一个包含以下循环的列表

portfolio_covlist2<-list()
for (i in 1:25) {
  a<-covst[Stock.mix.2[i,],Stock.mix.2[i,]]
  a<-list(matrix(a,nrow=2))
    portfolio_covlist2[i] <- a
}

然后数据看起来像这样

[[1]]
            [,1]        [,2]
[1,] 0.009168161 0.001283940
[2,] 0.001283940 0.002723437

[[2]]
            [,1]        [,2]
[1,] 0.021906044 0.002600486
[2,] 0.002600486 0.009508103

然后我希望能够将这些相乘

w2*portfolio_covlist2[1]*t(w2) 

给我一​​个混合的标准偏差。但我收到此错误:

Error in w2 * portfolio_covlist2[1] : 
  non-numeric argument to binary operator

w 个向量确认为数字,但列表类型不...帮助!

谢谢

【问题讨论】:

  • w2*portfolio_covlist2[[1]]*t(w2)?如果它是一个列表,那么portfolio_covlist2[1] 仍然会返回一个列表,其中只有一个元素,这恰好是您的矩阵。 [[1]] 返回元素本身。试试list(1:3,2:4)[1]list(1:3,2:4)[[1]] 看看有什么不同。
  • 您能以可重现的格式共享数据吗?我们可以自己复制和测试的东西吗?了解如何提供reproducible example
  • 天啊!!!我根本不需要将结果存储在列表中。我可以从代码中的 a 创建响应,然后将结果直接存储在新向量中!

标签: r list numeric


【解决方案1】:

您无意中尝试使用多个列表而不是矩阵。

顺便说一句,我认为您希望 %*% 进行矩阵乘法,而不是 * 进行逐元素乘法。

L <- list(structure(c(0.009168161, 0.00128394, 0.00128394, 0.002723437), .Dim = c(2L, 2L)), structure(c(0.021906044, 0.002600486, 0.002600486, 0.009508103), .Dim = c(2L, 2L)))

m <- matrix(1:4, nr=2)

m %*% L[1] %*% t(m)
# Error in m %*% L[1] : requires numeric/complex matrix/vector arguments
1
m %*% L[[1]] %*% t(m)
#            [,1]       [,2]
# [1,] 0.04138273 0.06385697
# [2,] 0.06385697 0.10079068

原因是list[ 运算符返回一个列表,其中包含选定的元素,而 [[ 返回单个(未列出)元素:

L[1]
# [[1]]                         <--- this means it is still in a list, even just length 1
#             [,1]        [,2]
# [1,] 0.009168161 0.001283940
# [2,] 0.001283940 0.002723437

L[[1]]
#             [,1]        [,2]
# [1,] 0.009168161 0.001283940
# [2,] 0.001283940 0.002723437

【讨论】:

  • 好的,那么,您不能将组合矩阵输出到列表中吗?那么如果不在列表中,我如何创建一组 25 个矩阵? data.frame 对我来说似乎是错误的。
  • 嗯?这矩阵的list,它确实可以做你需要的乘法。唯一的区别是你需要[[,而只需要[。 (不要将%*% 运算符与任何类似框架的运算符混淆。它与magrittr 中的%&gt;% 无关,由dplyr 重新导出。%*% 是构建的线性代数矩阵乘法运算符进入基础 R.)
  • 好的!知道了。非常感谢。一周前我还不太明白。但现在我愿意。在 Covid 期间在黑暗中学习编程语言并不理想!
  • 如果这回答了您的问题,请accept it。谢谢!
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
  • 2012-12-03
  • 2022-01-23
  • 2020-08-01
  • 2017-09-16
相关资源
最近更新 更多