2016-07-12 4 views
0
のエラー

この関数を実行しようとしていて、 "2進演算子の非数値引数"がポップアップしています。私は似たような質問をいくつか見てきましたが、私のコードで何が問題になっているのかまだ分かりません。"2進演算子の非数値引数" R

TakeOneIndStep <- function(Itl, N){  # Itl is a vector 
    foo <- ListMaintenance(Itl, N)  # is a vector of same length as Itl. Displays the coordinates of coalesced walks. 
    incrm <- sample(c(-1, 0, 1), size = length(Itl), replace = T, prob = c(0.25, 0.5, 0.25)) 
    for (j in 1:length(Itl)){ 
    if(Itl[j] %in% foo){ 
    Itl[j] <- (Itl[j] + incrm[j]) %% N 
    }else{ 
    Itl[j] <- "H"    # H is a "placeholder", just to indicate that that particular chain has coalesced and no longer is updated. 
    } 
} 
    return(Itl) 
} 

エラーは6行目で発生しますItl[j] <- (Itl[j] + incrm[j]) %% N

補助機能のためのコード:大きな画像で

ListMaintenance <- function(Temp, N){ # Temp is a vector 
    rez <- CheckCoalescence(Temp) 
    fubar <- vector() 
    for(i in 1:length(rez)){ 
    for(x in 0:(N-1)){if (x %in% rez[[i]]){fubar[x] <- min(rez[[i]])} 
    } 
    } 
    return(fubar)     # output is a vector. Coordinates with the same value have the index of the smallest occurrence. 
} 

CheckCoalescence <- function(Pts){ 
    mar <- unname(split(seq_along(Pts), Pts)) 
    return(mar) 
} 

、私は二つ以上の異なる出発点とランダムウォークプロセスをシミュレートしようとしています。したがって、引数Itlは時刻(t-1)の各歩行の値になり、この関数はこれらの値を再帰的に更新します。実用的な目的のために

、私はこの場合A <- c(0, 2, 3, 2, 6)TakeOneIndStep(A, N = 9)

と機能をテストしようとし、Aはちょうど任意のベクトルです。ウォークをシミュレートするコードが増えましたが、エラーの原因となっている部分を提示しました。

+0

Itl[j] <- (Itl[j] + incrm[j]) %% N 

を置き換える: 'ITL [J] < - アイデアは' Itl'ということであれば、 "H" は、 '、かなり疑わしいです数字を保持するはずです。あなたはRの強制ルールを知っていますか?ベクトルは単一のデータ型しか保持できません。他の値を壊さない「プレースホルダ」を探しているなら、おそらく「NA」を試してみてください。 – joran

+0

'' H ''値が必要な場合は、ループ '(as.numeric(Itl [j])+ incrm [j])の数値に変換して戻すことができます。 –

+0

ありがとう、@ブラッドフォードコンドーン – KirkLand

答えて

2

問題はItl[j] <- "H"です。クラスに文字を追加してクラスを変更します。コード内でチェーンが一度合体すると、Itl[j]は数値演算には無効になります。問題を解決するには

、私はこの

​​
関連する問題