Fehler bei nicht numerischen Argumenten für binäre Operatoren in R

Das Problem liegt meiner Meinung nach darin, wie CurrentDay eingegeben wird. Er wurde zuvor als erstellt:

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

Sowohl PnL als auch Day sind numerische Werte.

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

Wobei Transaction eine Liste zurückgibt und b eine ganze Zahl ist.

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

Weiß jemand, warum ich diese Fehlermeldung erhalte?

Fehler in CurrentDay - MA: nicht-numerisches Argument für binären Operator

Da sich Ihre Frage auf die Fehlermeldung bezieht und nicht auf das, was Ihre Funktion zu erreichen versucht, werde ich mich mit dem Fehler befassen.

- ist der 'binäre Operator', auf den sich Ihr Fehler bezieht, und entweder CurrentDay oder MA (oder beide) sind nicht-numerisch.

Eine binäre Operation ist eine Berechnung, die zwei Werte (Operanden) annimmt und einen anderen Wert erzeugt (siehe Wikipedia für mehr). Der Operator "+" ist ein solcher Operator: "1 + 1" nimmt zwei Operanden (1 und 1) und erzeugt einen anderen Wert (2). Beachten Sie, dass der erzeugte Wert sich nicht unbedingt von den Operanden unterscheidet (z. B. 1 + 0 = 1).

R weiß nur, wie man + (und andere binäre Operatoren, wie -) auf numerische Argumente anwendet:

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

Wenn Sie diese Fehlermeldung sehen, bedeutet das, dass Sie (oder die Funktion, die Sie aufrufen) versuchen, eine binäre Operation mit etwas durchzuführen, das keine Zahl ist.

EDIT:

Ihr Fehler liegt in der Verwendung von [ anstelle von [[. Da Tag eine Liste ist, gibt die Unterteilung mit [ eine Liste zurück, keinen numerischen Vektor. [[ hingegen gibt ein Objekt der Klasse des Elements zurück, das in der Liste enthalten ist:

> 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", wie Sie es definiert haben, gibt eine Liste von zwei Vektoren zurück. Oben ist Day eine Liste mit einem Vektor. Tag2" hingegen ist einfach ein Vektor.

Kommentare (3)

Ich konfrontiert dieses Problem in einem Szenario, wo für eine der Methode, die ich den numerischen Wert in Anführungszeichen übergeben.

Z.B..

Fehlercode:

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

richtig:

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

Kommentare (0)