0

我正在尝试遍历一个向量并编辑一个新向量,但是我不断收到错误替换的长度为零。发生错误的部分在这里:

NewPos1 = rep(NROW(sig_decision))
for( i in 2:length(NewPos)) {
 NewPos1[i] = ifelse( NewPos[i] == 0 & NewPos[i-1] == 1 & ind1[i] > 0 , 1, 
      ifelse(NewPos[i] ==0 & NewPos[i-1] == -1 & ind1[i] < 0  , -1,0))
}

好的,更具体

我哪里错了?

编辑:我应该更具体地说 ind1 是一个数字向量。我想要一个循环的原因是,如果 NewPos(NewPos[1]) 的前一个元素是 1 并且 ind1[2] > 0,那么从 NewPos1([NewPos[1]) 中的第二个元素开始,那么我想要 NewPos1[ 2] 为 1,依此类推,遍历整个向量,如果 ind1[3] >0,则 NewPos1[3] 也为 1

4

1 回答 1

3

问题很可能在于ind1(因为你还没有告诉我们那是什么)。我猜想(如果ind1真的是一个与 长度相同的数字向量NewPos)这是解决您的问题的更有效的解决方案:

v <- NewPos[-1]  ## elements 2:n
ind2 <- ind1[-1] ## elements 2:n
vlag1 <- NewPos[-length(NewPos)] ## elements 1:(n-1)
NewPos1 <- ifelse(v==0 & vlag1==1 & ind2>0, 1,
               ifelse(v==0 & vlag==-1 & ind2<0, -1, 0))

正如@CarlWitthoft 指出的那样,switch有时可能很有用,但我认为两个嵌套ifelse语句并不过分。

于 2012-07-27T19:38:47.453 回答