ohlc数据具有不同长度的列 - 无法对其他数据帧执行算术运算?

时间:2016-02-03 21:23:28

标签: r quantmod

我尝试使用Quantmod和TTR计算R中的Premium Stochastic,但我不断收到以下错误:

 >tmp=EMA(EMA(((marketdata$Close-LL)/(HH-LL)*100-50)*0.1,5),5)
Error in EMA(((marketdata$Close - LL)/(HH - LL) * 100 - 50) * 0.1, 5) : 
  Invalid 'n'

marketdata是包含OHLC数据的数据框。它在使用csv文件时工作正常,但在将yahoo财务数据导入数据框时,它似乎具有不同的列长度。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我查看了EMA的源代码,并说:

    if (n < 1 || n > NROW(x)) 
    stop("Invalid 'n'")

在您的情况下,n定义为5。这意味着n < 1FALSE。因此,n > nrow(x)

但是......那很奇怪。您正在提供向量,向量的nrowNULL。事实证明,如果您阅读?EMAx必须是一个矩阵。

所有这一切的教训是,如果出现问题,您应该始终仔细阅读函数的帮助页面,尤其是对于包。如果你在那里找不到答案,可以通过输入函数名来查看源代码;通常这足以找到哪一行引发错误。

另外,请尝试rollmean中的zoo,其中一个效果非常好:

library(zoo) 
a <- 1:10
rollmean(a,5)
# 3 4 5 6 7 8