错误:维度数量

时间:2016-11-25 14:54:39

标签: r

我正在尝试使用短权重对股票投资组合进行分析。

为了能够这样做,我必须创建一个循环来转换我的"正常"每当相应的重量为"短"时,返回相反的符号(+/-) (负号)。

矩阵 mat_weights 包含34个不同投资组合的最佳权重,每个投资组合包含越来越多的股票,这些股票根据优化过程而变化(" Markovitz"):

  • 第一个投资组合:4个股票
  • 第二个投资组合:5个股票
  • 第3个投资组合:6个股票
  • ........
  • 第34个投资组合:34只股票

矩阵 mat_returns_adjusted 是一个矩阵,应该包含循环的结果,如果相应的组合重量为负,则应该是对每个变化的符号变化的返回。 所以最后我应该能够获得一个1040(行)×34(列)矩阵,其中填充了"调整后的#34;回报。

矩阵 mat_returns_raw 包含链接到另一个名为 nomi 的矩阵的每个股票的回报,该矩阵将正确的股票回报与相应股票的名称相连接

这是上面讨论的for循环:

for(i in 1:34) {
mat_weights_short <- (mat_weights[i,1:i+3])
mat_returns_adjusted <- matrix (NA,1040,i+3)
mat_returns_raw <- returns[,nomi[i,1:i+3]]
if(mat_weights_short[i]<0) {
mat_returns_adjusted[,i]<- -(mat_returns_raw[,i])
} else {
mat_returns_adjusted[,i]<- mat_returns_raw[,i]
}}

当我将其输入R控制台时,我收到一条错误消息:

Error in mat_returns_raw[, i] : incorrect number of dimensions

我试图解决问题,但到目前为止我还没能解决问题。 如果问题不清楚,我会事先道歉,但这是我第一次使用R. 任何帮助都会非常令人沮丧!

1 个答案:

答案 0 :(得分:0)

最有可能的问题是mat_returns_raw不是正确的对象/大小。试试这个让问题更加明显。

for(i in 1:34) {
    mat_weights_short <- (mat_weights[i,1:i+3])
    mat_returns_adjusted <- matrix (NA,1040,i+3)
    mat_returns_raw <- returns[,nomi[i,1:i+3]]

    ## print updates
    print(paste0("You're trying to pull column ", i " out of a ", class(mat_returns_raw), " which has ", ncol(mat_returns_raw), " columns"))
    flush.console()

    if(mat_weights_short[i]<0) {
        mat_returns_adjusted[,i]<- -(mat_returns_raw[,i])
    } else {
        mat_returns_adjusted[,i]<- mat_returns_raw[,i]
    }
}

另外,我建议运行for循环,在控制台中键入i以查找错误发生的迭代,然后在for中逐行运行代码循环以手动找出问题的位置,经常使用dim()class()之类的东西来查找您不期望的任何内容。祝你好运