R - 绘制在和没有循环之间的差异

时间:2013-12-20 00:15:53

标签: r loops plot quantmod

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

2 个答案:

答案 0 :(得分:2)

我认为这是懒惰评估的问题。尝试将您的电话打包到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();
}

答案 1 :(得分:0)

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