Errore di un argomento non numerico nell'operatore binario in R

Il problema credo sia come viene inserito CurrentDay. In precedenza era stato creato come:

Transaction <- function(PnL, Day)
  results <- list(a = PnL, b = Day)
  return(results)

Sia PnL che Day sono valori numerici.

Day <- Transaction(PnL, Day)["b"]

Dove Transaction ha restituito una lista e b è un intero.

moving_avg <- function(StockData, MA, CurrentDay){
  #MA = Days long the MA is
  #CurrentDay = What day we are currently on
  MAValue <- NULL
  total <- 0
  start <- CurrentDay - MA
  for(i in 1:length(MA)) {
    total <- total + StockData[[start, 4]]
    start <- start + 1
  }
  MAValue <- total/MA
  return(MAValue)
}

Qualcuno sa perché sto ricevendo questo errore?

Errore in CurrentDay - MA: argomento non numerico all'operatore binario

Poiché la tua domanda è formulata in relazione al tuo messaggio di errore e non a quello che la tua funzione sta cercando di realizzare, mi occuperò dell'errore.

- è l''operatore binario' a cui il tuo errore fa riferimento, e sia CurrentDay o MA (o entrambi) non sono numerici.

Un'operazione binaria è un calcolo che prende due valori (operandi) e produce un altro valore (vedi wikipedia per maggiori informazioni). + è uno di questi operatori: "1 + 1" prende due operandi (1 e 1) e produce un altro valore (2). Si noti che il valore prodotto non è necessariamente diverso dagli operandi (ad esempio, 1 + 0 = 1).

R sa solo come applicare + (e altri operatori binari, come -) ad argomenti numerici:

> 1 + 1
[1] 2
> 1 + 'one'
Error in 1 + "one" : non-numeric argument to binary operator

Quando vedi questo messaggio di errore, significa che stai (o la funzione che stai chiamando) cercando di eseguire un'operazione binaria con qualcosa che non è un numero.

EDIT:

Il tuo errore sta nell'uso di [ invece di [[. Poiché Day è una lista, il sottoinsieme con [ restituirà una lista, non un vettore numerico. [[, invece, restituisce un oggetto della classe dell'elemento contenuto nella lista:

> Day  class(Day)
[1] "list"
> Day + 1
Error in Day + 1 : non-numeric argument to binary operator

> Day2  class(Day2)
[1] "numeric"
> Day2 + 1
[1] 3

Transaction, come l'hai definita, restituisce una lista di due vettori. Sopra, Day è una lista contenente un vettore. Giorno2, invece, è semplicemente un vettore.

Commentari (3)

Ho affrontato questo problema in uno scenario in cui per uno dei metodi ho passato il valore numerico tra virgolette.

Ad es.

Codice di errore:

corrplot(corr_data,order="hclust",addrect="3")

corretto :

corrplot(corr_data,order="hclust",addrect=3)

Commentari (0)