Non-numeric Argument to Binary Operator Error in R

前端 未结 1 808
死守一世寂寞
死守一世寂寞 2020-11-30 05:46

The issue I believe is how CurrentDay is entered. It was previously created as:

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


        
相关标签:
1条回答
  • 2020-11-30 06:03

    Because your question is phrased regarding your error message and not whatever your function is trying to accomplish, I will address the error.

    - is the 'binary operator' your error is referencing, and either CurrentDay or MA (or both) are non-numeric.

    A binary operation is a calculation that takes two values (operands) and produces another value (see wikipedia for more). + is one such operator: "1 + 1" takes two operands (1 and 1) and produces another value (2). Note that the produced value isn't necessarily different from the operands (e.g., 1 + 0 = 1).

    R only knows how to apply + (and other binary operators, such as -) to numeric arguments:

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

    When you see that error message, it means that you are (or the function you're calling is) trying to perform a binary operation with something that isn't a number.

    EDIT:

    Your error lies in the use of [ instead of [[. Because Day is a list, subsetting with [ will return a list, not a numeric vector. [[, however, returns an object of the class of the item contained in the list:

    > 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, as you've defined it, returns a list of two vectors. Above, Day is a list contain one vector. Day2, however, is simply a vector.

    0 讨论(0)
提交回复
热议问题