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]) の 2 番目の要素から開始し、NewPos1[ 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が指摘しているように、役に立つ場合もありますが、2つのネストされたステートメントが過剰switchだとは思いません。ifelse

于 2012-07-27T19:38:47.453 に答える