【发布时间】:2014-12-25 18:34:22
【问题描述】:
我正在从雅虎导入一些股票数据,并希望将每日范围计算为高 - 低。然后我想把每只股票的范围放在一个 xts 对象中。下面的代码完成了这一点,但对我来说似乎很复杂。
问题从 lapply 开始。我得到了 xts 对象的列表,但需要使用 [[ ]] 来“向下一层”引用各个对象。如果我可以将每个 xts 对象引用为引号 [i],我可以继续使用 apply 函数而不是 for 循环。我尝试使用 sapply 而不是 lapply 但出现错误,“数组错误(r,dim = d,dimnames = if (!(is.null(n1
此外,我讨厌我在第二个 for 循环中使用的做法。 range 尚不存在,因此我需要创建它,但以这种方式执行它似乎违背了循环的目的。有没有更好的办法?我也想避免创建一个空的 xts 对象,因为我知道这也不是一个好习惯。
require(quantmod)
tickers <- c("ERX", "EWJ", "EWW", "EWZ", "FAS", "FAZ")
quotes <- lapply(tickers,function(x) getSymbols(x, src="yahoo", from="2014-10-10", auto.assign=FALSE))
names(quotes) <- tickers
for (i in 1:length(quotes)){
quotes[[i]] <- quotes[[i]][,2] - quotes[[i]][,3]
colnames(quotes[[i]]) <- paste(names(quotes)[i], "Range")
}
for (i in 1:length(quotes)){
if (i == 1) {range <- quotes[[i]]}
else {range <- merge(range, quotes[[i]])}
}
谢谢。
【问题讨论】: