我试图迭代一个向量并编辑一个新的但是我一直得到错误替换的长度为零。发生错误的部分在这里:
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]&gt;,则从NewPos1中的第二个元素([NewPos [1])开始。 0然后我希望NewPos1 [2]成为一个,依此类推迭代整个向量,这样如果ind1 [3]> 0,那么NewPos1 [3]也是1
答案 0 :(得分: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
语句过多。