我认为问题是如何输入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:二元运算符的非数字参数
答案 0 :(得分:46)
因为你的问题是关于你的错误信息的,而不是你的功能试图完成的任何事情,我将解决错误。
-
是您的错误引用的“二元运算符”,CurrentDay
或MA
(或两者)都是非数字的。
二元运算是一种计算,它采用两个值(操作数)并产生另一个值(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