R索引数字(0)而不是0

时间:2018-06-08 06:39:42

标签: r for-loop indexing

这是整个事情,它仍然无效。我想问题是第二个Amat条件和if else结构:

Dmat <- matrix(0,nrow= J, ncol=J)
diag(Dmat) <- 1
dvec <- rep(0,J)
dvec <- -hsmooth
Aeq <- matrix(nrow= J, ncol=0)
beq <- rep(0)
Amat <- matrix(0,J,2*J-3)
bvec <- vector(mode="numeric", length=2*J-3)

for(j in 1:J)
{
Amat[j-1,j-1] = -1
Amat[j,j-1]   = 1
bvec[j-1]     = Delta1
}

for(j in 2:J){
Amat[j,J-1+j-2]   = -1/ (Q[j] - Q[j-1])  
if (j==2)
{Amat[j-1,J-1+j-2] = 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - 0)
}
else
{Amat[j-1,J-1+j-2] = 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2])
}
Amat[j-2,J-1+j-2] = -1/ (Q[j-1] - Q[j-2])
bvec[J-1+j-2]     = Delta2
}

solution1 <- solve.QP(Dmat, dvec, Amat, bvec, meq=0, factorized=FALSE)

数学表格如下:

min sum(mj-m ^),其中j从1变为J.

ST。

mj-1&lt; = mj - delta1

1 /(Qj-1 -Qj-2)(mj-2-mj-1)&lt; = 1 /(Qj -Qj-1)(mj-1-mj)-delta2

如果有人帮忙,我真的很感激。

1 个答案:

答案 0 :(得分:1)

R不是CR中的索引以1开头,而不是零。所以Q中的第一个元素是Q[1]。这与许多其他(C - 启发的)语言不同,但与通常的数学符号不同。

因此,您可能希望将Q[j-2]替换为Q[j-1]

编辑:

自从我提出答案以来,这个问题已经发生了很大变化。问题仍然存在:

for(j in 1:J)
{
    Amat[j-1,j-1] = -1

Wenn j1,然后j-1为零且Amat[0,0]不是一个有用的表达式,因为索引应该从1开始。< / p>