【问题标题】:R - differences between plotting in and without loopR - 绘制和不绘制循环之间的差异
【发布时间】:2013-12-20 00:15:52
【问题描述】:

我对 R 有一个很奇怪的问题。我想绘制一些股票图表。一切正常,除了布林带 - BBands。 - 情节只包含系列,不包含乐队。仅当我在循环中绘制时才会发生这种情况。当我试图在没有循环的情况下绘制它时,就像在我的代码末尾一样,没关系。

编辑//我刚刚注意到 Aroon、SMI、CVL 和 MACD 也会发生这种情况。

library(quantmod)
library(TTR)

getSymbols( Symbols="AAPL", src="yahoo")
th=chartTheme('white');

funkcje=c('BBands','ChAD','CMF','MFI','CCI','MACD','RSI','ROC','TDI','Aroon','SMI','ADX','ATR','ChVol','CLV','DPO','EMV','KST','SAR','Volatility','WPR','ZigZag');

#everything works fine except for i=1 - BBands
for(i in 1:length(funkcje)){
  fun=get(paste0('add',funkcje[i]));
  cat(funkcje[i],'\n')
  pdf(paste0(funkcje[i],'.pdf'))
  chartSeries(AAPL, type="line", theme=th)
  fun();
  dev.off();
}

#this works fine
fun=get(paste0('add',funkcje[1]))
pdf(paste0(funkcje[1],'.pdf'))
chartSeries(AAPL, type="line", theme=th)
fun()
dev.off()

【问题讨论】:

  • 这是一个很好的问题。我也遇到了这个问题,不知道怎么解决。

标签: r loops plot quantmod


【解决方案1】:

我认为这是惰性评估的问题。尝试在print 中对fun 进行呼叫以强制评估。

for(i in 1:length(funkcje)){
  fun=get(paste0('add',funkcje[i]));
  cat(funkcje[i],'\n')
  pdf(paste0(funkcje[i],'.pdf'))
  chartSeries(AAPL, type="line", theme=th)
  print(fun())
  dev.off();
}

【讨论】:

    【解决方案2】:

    使用chart_Series() 遇到了类似的问题。直到我将 chart_Series() 放在一个原本为空的 plot() 函数中之前,才不会在循环中绘图。 BBands 会显示是否在此处进行了相同的操作。我减少了研究以避免图形设备上的边距问题,并通过将实际的 chartSeries() 调用移出循环来减少闪烁:

    getSymbols( Symbols="AAPL", src="yahoo")
    th=chartTheme('white');
    
    funkcje=c('BBands','ChAD','CMF','MFI','CCI','MACD');
    chartSeries(AAPL, type="line", theme=th)
    #everything works fine except for i=1 - BBands
    for(i in 1:length(funkcje)){
        fun=get(paste0('add',funkcje[i]));
        plot(fun())
    }
    

    我希望这可以帮助其他希望获得他们的 quantmod for/while 循环来实际绘制一些东西的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多