R - 在循环中和不循环中绘制之间的差异



我对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()
我认为

这是懒惰计算的问题。尝试将fun的调用包装在print中以强制评估。

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();
}

使用 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 循环来实际绘制一些东西的人。

最新更新