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 <- Transaction(1, 2)["b"]
> class(Day)
[1] "list"
> Day + 1
Error in Day + 1 : non-numeric argument to binary operator
> Day2 <- Transaction(1, 2)[["b"]]
> 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.
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)