2016-07-12 13 views
0
의 오류

이 함수를 실행하려고 시도하고 "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) 
} 

여섯 번째 줄에 오류가 발생합니다. 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)에 각 보행의 값이되며이 함수는 이러한 값을 재귀 적으로 업데이트합니다.

실용적인 목적을 위해, I이 경우 A <- c(0, 2, 3, 2, 6)TakeOneIndStep(A, N = 9)

과 기능을 테스트하려고 A는 임의의 벡터이다. 보행을 시뮬레이트하는 코드가 더 있지만 오류의 원인이되는 부분을 방금 제시했습니다.

+0

이 함께

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

을 대체,이 문제를 해결하려면'ITL [J] <- "H"아이디어가 Itl''이다 경우'오히려 의심된다 숫자를 보유하기로되어 있습니다. R의 강제 규칙을 알고 있습니까? 벡터는 단일 데이터 형식 만 포함 할 수 있습니다. 다른 값을 왜곡시키지 않는 "자리 표시 자"를 찾으려면 'NA'를 시도해보십시오. – joran

+0

''H ''값이 필요한 경우,''as.numeric (Itl [j]) + incrm [j]) 루프의 숫자로 강제 변환 할 수 있습니다. –

+0

감사합니다. @bradford condon – KirkLand

답변

2

문제는 Itl[j] <- "H"입니다. 문자를 벡터에 추가하여 클래스를 변경합니다. 코드에서 체인이 합쳐지면 Itl[j]은 더 이상 숫자 연산에 유효하지 않습니다.

내가

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