R中二进制运算符错误的非数字参数

时间:2015-04-16 04:37:42

标签: r

我认为问题是如何输入CurrentDay。它以前创建为:

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

PnL和Day都是数值。

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

其中,Transaction返回一个列表,b是一个整数。

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

有人知道我收到此错误的原因吗?

  

CurrentDay中的错误 - MA:二元运算符的非数字参数

3 个答案:

答案 0 :(得分:46)

因为你的问题是关于你的错误信息的,而不是你的功能试图完成的任何事情,我将解决错误。

-是您的错误引用的“二元运算符”,CurrentDayMA(或两者)都是非数字的。

二元运算是一种计算,它采用两个值(操作数)并产生另一个值(see wikipedia for more)。 +是一个这样的运算符:“1 + 1”需要两个操作数(1和1)并产生另一个值(2)。注意,产生的值不一定与操作数不同(例如,1 + 0 = 1)。

R只知道如何将+(以及其他二元运算符,例如-)应用于数字参数:

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

当您看到该错误消息时,这意味着您(或您正在调用的函数)尝试使用非数字的内容执行二进制操作。

修改

您的错误在于使用[代替[[。由于Day是列表,因此使用[进行子集将返回列表,而不是数字向量。但是,[[返回列表中包含的项的类的对象:

> 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,正如您所定义的那样,返回两个向量的列表。上面,Day是一个包含一个向量的列表。但是,Day2只是一个向量。

答案 1 :(得分:1)

在一种方法中,我通过引号将数字值传递给我,因此我遇到了这个问题。

错误代码:

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

更正一个:

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

答案 2 :(得分:0)

如果你在你的代码之前运行它,一切都会好起来的。

@wordpress/scripts