2012-07-27 62 views
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]是一個依次迭代遍歷整個向量,所以如果ind1 [3]大於0,那麼NewPos1 [3]也是1

+0

我不知道這些變量是什麼。 – Seth 2012-07-27 19:11:00

+0

什麼是sig_decision?什麼是'NewPos',因爲你只定義了'NewPos1'。與此同時,檢查'switch'而不是嵌套數十個'if else'元素。 – 2012-07-27 19:12:40

+0

有關可重現性的信息,請參閱http://tinyurl.com/reproducible-000 ... – 2012-07-27 19:33:42

回答

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陳述是過度的。