对于循环,R中的维数不正确

时间:2018-03-19 19:30:35

标签: r for-loop matrix

我试图通过循环遍历向量(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

1 个答案:

答案 0 :(得分:0)

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个元素。