【问题标题】:Error: Incorrect number of dimension错误:维数不正确
【发布时间】:2017-04-10 00:15:00
【问题描述】:

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

为了能够做到这一点,我必须创建一个循环,将我的“正常”返回转换为相反的符号 (+/-),只要相应的权重为“短”(负号)。

矩阵 ma​​t_weights 包含 34 个不同投资组合的优化权重,每个投资组合包含数量不断增加的股票,这些股票数量随优化过程而变化(“Markovitz”):

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

矩阵ma​​t_returns_adjusted是一个矩阵,它应该包含循环的结果,如果相应的投资组合权重为负,则该矩阵应该是与每个符号变化的股票相对应的收益。 所以最后我应该能够获得一个 1040(rows)x 34(columns) 的矩阵,其中填充了“调整后”的回报。

矩阵 ma​​t_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。 任何帮助将不胜感激!!!

【问题讨论】:

    标签: r


    【解决方案1】:

    问题很可能是 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() 之类的东西来寻找您不期望的任何东西。祝你好运

    【讨论】:

    • 我尝试为每个代码行运行循环,显然问题在于 mat_weights-short,当我运行 dim() 时,它给了我一个 NULL 结果,它给了我 error("out of bounds")。有关如何解决问题的任何建议?
    • 我会确保length(mat_weights_short) &gt;= 34,它是一个向量,所以你会想用length而不是dim来检查它。我猜你的if 语句有问题,因为它正在寻找超过其实际长度的i 的迭代(例如i = 21length(mat_weights_short) = 20,所以它查看第21 个元素和第21 个元素不存在,因为它的长度只有 20)。对我来说听起来像是“越界”。
    • 我刚刚运行length(mat_weights_short),它等于34。它的实际长度是31,这就是我添加+3的原因
    • 如果有时间可以看看我的回答吗? stackoverflow.com/questions/65781259/… 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多