chart_Series不会在函数中调用时使用条件求值为FALSE

时间:2015-10-31 18:23:43

标签: r quantmod

我对R很好,所以也许我错过了一些关于功能的概念。但这是我的例子,我感兴趣为什么它会这样?

require(quantmod);

myPlot = function(ts, addAdx = TRUE) {
  chart_Series(ts);

  if (addAdx) {
    add_TA(ADX(HLC(ts))$ADX)  
  }

}

getSymbols("DIA", src='yahoo');
myPlot(DIA, addAdx = FALSE)

如果我将addAdx参数设置为false,那么我的函数不会绘制图表(否则很好)。那是为什么?

2 个答案:

答案 0 :(得分:1)

我不确定为什么会这样,但这是解决方法。当chart_Series为TRUE且为FALSE时,将addAdx两次放入函数中。

myPlot = function(ts, addAdx = TRUE) {
if (addAdx) {
  chart_Series(ts)
  add_TA(ADX(HLC(ts))$ADX)
  } else {
  chart_Series(ts)
  }

}

getSymbols("DIA", src='yahoo');
myPlot(DIA, addAdx = FALSE)

enter image description here

myPlot(DIA, addAdx = TRUE)

enter image description here

答案 1 :(得分:1)

如果您不使用return,R函数将返回最新的计算值。

如果addAdx设置为FALSE,则该函数返回void。

此代码解决了您的问题:

  myPlot = function(ts, addAdx = TRUE) {
  p <- chart_Series(ts);

  if (addAdx) {
   p <- add_TA(ADX(HLC(ts))$ADX)  
  }

  p #return(p)
}