El problema creo que es cómo se introduce el CurrentDay. Antes se creaba como:
Transaction <- function(PnL, Day)
results <- list(a = PnL, b = Day)
return(results)
Tanto PnL como Day son valores numéricos.
Day <- Transaction(PnL, Day)["b"]
Donde Transaction devolvió una lista y b es un número entero.
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)
}
¿Alguien sabe por qué recibo este error?
Error en CurrentDay - MA : argumento no numérico para el operador binario
Debido a que su pregunta está formulada en relación con su mensaje de error y no con lo que su función está tratando de lograr, voy a abordar el error.
-
es el 'operador binario' al que se refiere su error, y o bien CurrentDay
o bien MA
(o ambos) son no numéricos.
Una operación binaria es un cálculo que toma dos valores (operandos) y produce otro valor (ver wikipedia para más información). El operador +
es uno de ellos: "1 + 1" toma dos operandos (1 y 1) y produce otro valor (2). Tenga en cuenta que el valor producido no es necesariamente diferente de los operandos (por ejemplo, 1 + 0 = 1).
R sólo sabe aplicar +
(y otros operadores binarios, como -
) a argumentos numéricos:
> 1 + 1
[1] 2
> 1 + 'one'
Error in 1 + "one" : non-numeric argument to binary operator
Cuando vea ese mensaje de error, significa que usted (o la función que está llamando) está tratando de realizar una operación binaria con algo que no es un número.
EDIT:
Tu error radica en el uso de [
en lugar de [[
. Dado que Day
es una lista, el subconjunto con [
devolverá una lista, no un vector numérico. [[
, sin embargo, devuelve un objeto de la clase del elemento contenido en la 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
, tal y como lo has definido, devuelve una lista de dos vectores. Arriba, Day
es una lista que contiene un vector. Sin embargo, Day2
es simplemente un vector.
Me encontré con este problema en un escenario donde para uno de los métodos pasé el valor numérico entre comillas.
Por ejemplo
Código de error:
corrplot(corr_data,order="hclust",addrect="3")
correcto :
corrplot(corr_data,order="hclust",addrect=3)