【问题标题】:For loop incorrect number of dimensions in RFor循环R中的维数不正确
【发布时间】:2018-03-19 19:30:34
【问题描述】:

我试图通过循环遍历向量的行 (theta) 和单独的矩阵 (tmp) 的列来创建响应概率矩阵。我不断收到错误消息incorrect number of subscripts on matrix并且不确定我做错了什么。任何帮助将不胜感激!

theta = seq(from=-4, to=4, by=.01)

ID = c(1:10)
a = c(1.11,1.03,1.03,1.62,1.23,1.16,1.46,0.91,0.78,0.85)
b = c(-0.33,0.05,-1.25,-0.18,0.47,-1.11,-0.17,-0.57,-0.18,0.45)
c = c(0.16,0.18,0.17,0.24,0.12,NA,NA,NA,0.29,NA)

tmp = data.frame(ID,a,b,c)

for (j in 1:nrow(tmp)) {
  for (k in 1:length(theta)){
  RP[k,j] = tmp$c[j] + ((1-tmp$c[j])/
                (1+exp(-1.7 * tmp$a[j]*theta - tmp$b[j])))
  }
}

所需的结果是行数与 theta 长度相同且列数与 tmp 数据帧相同的矩阵。它应该是这样的:

head(tmp2)
         p1        p2        p3        p4        p5 p6 p7 p8        p9 p10
1 0.1603182 0.1807822 0.1702159 0.2400104 0.1203281 NA NA NA 0.2929362  NA
2 0.1603243 0.1807960 0.1702197 0.2400107 0.1203350 NA NA NA 0.2929752  NA
3 0.1603305 0.1808100 0.1702236 0.2400110 0.1203421 NA NA NA 0.2930148  NA
4 0.1603368 0.1808243 0.1702276 0.2400113 0.1203493 NA NA NA 0.2930549  NA
5 0.1603432 0.1808389 0.1702316 0.2400116 0.1203567 NA NA NA 0.2930955  NA
6 0.1603497 0.1808537 0.1702357 0.2400120 0.1203642 NA NA NA 0.2931366  NA

【问题讨论】:

    标签: r for-loop matrix


    【解决方案1】:

    for 循环的最后一行,您使用整个向量 theta 作为乘数:

    (1+exp(-1.7 * tmp$a[j]*theta - tmp$b[j])))
    

    大概你打算使用第 k 个元素:

    (1+exp(-1.7 * tmp$a[j]*theta[k] - tmp$b[j])))
    

    由于您遗漏了矩阵 RP 的定义,因此我无法对此进行测试,但我确定您的意思不是每次循环都返回 801 个元素。

    【讨论】:

    • 谢谢!部分问题是我没有提前定义矩阵 RP。你的评论让我明白了。在将第 k 个元素添加到 theta 之后,循环终于起作用了。我很感激!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多