Я пытаюсь запустить эту функцию, и появляется «нечисловой аргумент двоичному оператору». Я видел довольно много вопросов, похожих на мои, но я все еще не могу понять, в чем проблема с моим кодом.Ошибка «нечислового аргумента для двоичного оператора» в 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), и эта функция будет рекурсивно обновлять эти значения.
Для практических целей, я пытался проверить функцию с A <- c(0, 2, 3, 2, 6)
и TakeOneIndStep(A, N = 9)
В этом случае A
просто произвольный вектор. Есть больше кода для имитации прогулки, но я просто представил часть, которая вызывает ошибку.
Это: 'Itl [J] <- "H"' довольно подозреваем, если идея заключается в том, что 'Itl' предполагается содержать числа. Знаете ли вы правила принуждения R? Векторы могут содержать только один тип данных. Если вы ищете «заполнителя», который не будет сжимать ваши другие ценности, возможно, попробуйте «NA»? – joran
Если вам требуется значение «H», вы можете принудительно возвращать числовое значение в цикле '(as.numeric (Itl [j]) + incrm [j])' –
Спасибо и @bradford adon – KirkLand