Eroare „argument nenumeric pentru operatorul binar” în R (Programare, R, Operatori Binari)

KirkLand a intrebat.

Am încercat să execut această funcție și apare „argument nenumeric la operatorul binar”. Am văzut destul de multe întrebări asemănătoare cu a mea, dar tot nu pot să-mi dau seama care este problema cu codul meu.

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)
}

Eroarea apare la a șasea linie Itl[j] <- (Itl[j] + incrm[j]) %% N.

Codul pentru funcțiile auxiliare:

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)
}

Pe larg, încerc să simulez un proces de mers aleatoriu cu mai mult de două puncte de plecare diferite. Deci, argumentul Itl ar fi valorile fiecărei plimbări la momentul (t-1), iar această funcție va actualiza recursiv aceste valori.

În scop practic, am încercat să testez funcția cu A <- c(0, 2, 3, 2, 6) și TakeOneIndStep(A, N = 9)

În acest caz, A este doar un vector arbitrar. Există mai mult cod pentru a simula mersul, dar am prezentat doar partea care provoacă eroarea.

Comentarii

  • Aceasta: Itl[j] <- "H" este destul de suspectă, dacă ideea este că Itl ar trebui să conțină numere. Cunoașteți regulile de coerciție din R? Vectorii pot conține doar un singur tip de date. Dacă sunteți în căutarea unui „spațiu rezervat” care să nu vă distrugă celelalte valori, poate încercați NA? –  > Por joran.
  • Dacă aveți nevoie de "H" puteți să o transformați din nou în valoare numerică în buclă. (as.numeric(Itl[j]) + incrm[j]) –  > Por Pierre L.
  • Mulțumesc și @bradford condon –  > Por KirkLand.
1 răspunsuri
Bradford Condon

Problema este Itl[j] <- "H": schimbați clasa prin adăugarea unui caracter la vector. Odată ce un lanț se unește în codul dvs, Itl[j] nu mai este valabil pentru operațiile numerice.

Pentru a rezolva problema, am înlocuit

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

cu

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