我相信的问题是如何输入CurrentDay.它以前创建为:
Transaction <- function(PnL, Day)
results <- list(a = PnL, b = Day)
return(results)
Run Code Online (Sandbox Code Playgroud)
PnL和Day都是数值.
Day <- Transaction(PnL, Day)["b"]
Run Code Online (Sandbox Code Playgroud)
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)
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我收到此错误的原因?
CurrentDay中的错误 - MA:二元运算符的非数字参数
Ric*_*der 53
因为你的问题是关于你的错误信息,而不是你的功能试图完成的任何问题,我将解决错误.
-
是您的错误引用的"二元运算符",CurrentDay
或者MA
(或两者)都是非数字的.
二元运算是一种计算,它采用两个值(操作数)并产生另一个值(更多信息请参见维基百科).+
是一个这样的运算符:"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
Run Code Online (Sandbox Code Playgroud)
当您看到该错误消息时,这意味着您(或您正在调用的函数)尝试使用非数字的内容执行二进制操作.
编辑:
你的错误在于使用[
而不是[[
.因为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
Run Code Online (Sandbox Code Playgroud)
Transaction
,正如您所定义的那样,返回两个向量的列表.上面Day
是一个包含一个向量的列表.Day2
然而,它只是一个向量.
归档时间: |
|
查看次数: |
273013 次 |
最近记录: |