我正试图通过quantmod的开盘价和收盘价收集共同基金业绩数据。我已经删除了5000个基金的清单,并试图循环并获得每个基金的一个开盘价和收盘价。我无法调用由getSymbols()
产生的xts对象,因为它被无形地调用到环境中。由于对象存储为其股票名称,我尝试通过其股票名称来调用它。
代码:
## loop thru list and use quantmod to calculate performance from 1/2/14 to 12/31/14
for(i in 1:4881){
ticker <- tickernames[i]
getSymbols(ticker)
Open <- ticker["2014-01-02",1]
Close <- ticker["2014-12-31",4]
performance2014[i] = (Open - Close)/Open
}
有没有办法可以使用ls()
来调用对象?
答案 0 :(得分:2)
关键是在auto.assign
中将FALSE
参数设置为getSymbols
。这样,您可以停用getSymbols
自动分配到全局环境。
以下是一个应该引导您逐步完成的示例:
require(quantmod)
#Vector of symbols to fetch prices for
symbols <- c('MSFT','SBUX','GOOGL')
#Initialize a list to store the fetched prices
myList <- list()
#Loop through symbols, fetch prices, and store in myList
myList <-lapply(symbols, function(x) {getSymbols(x,auto.assign=FALSE)} )
#Housekeeping
names(myList) <- symbols
#Access MSFT prices
myList[['MSFT']]
#Access SBUX prices
myList[['SBUX']]
#Access GOOGL prices
myList[['GOOGL']]
希望这能回答你的问题。