2013-12-20 50 views
2

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

编辑//我刚刚注意到它也发生在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() 
+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(); 
} 
+0

这为我解决了它 –

0

使用chart_Series()来碰到类似的问题。直到我将chart_Series()放入其他空的plot()函数中,才会在循环内部进行绘制。如果在这里完成同样的事情,BBands会显示出来。我通过移动实际chartSeries()呼叫循环之外降低到avoide我的图形设备上边距问题的研究,并减少闪烁:

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/while循环实际上阴谋一些东西。