我正在尝试使用lapply,将函数应用于列表中的所有符号。符号是以下形式的股票价格数据:
Date Open High Low Close
我已经能够使用这种格式:
require(TTR)
require(quantmod)
symbols <- c("XLF", "XLK", "XLU")
StartDate = '2015-01-01'
Stocks = lapply(symbols, function(sym, column) {
SMA(na.omit(getSymbols(sym, from=StartDate, auto.assign=FALSE))[,4],20)
})
但是,我无法锻炼如何简单地使用lapply将函数应用于我已经拥有数据的符号列表。我不想使用getSymbols下载数据,我想将自己的数据用于那些相同的符号。
在下面的示例中,我只是为了生成可重现的示例而下载它,但实际上我将符号数据存储为XTS对象。
我无法理解为什么这不起作用,或者它与第一个例子有什么不同:
require(TTR)
require(quantmod)
symbols <- c("XLF", "XLK", "XLU")
getSymbols(symbols, src='yahoo', from = '2015-01-01')
SMA_Symbols <- lapply(symbols, function(sym, column) {
SMA(sym[,4],20)
})
我收到错误:
sym [,4]中的错误:调用的维度数不正确: 继承(x,“xts”)
答案 0 :(得分:1)
第二种方法不起作用的原因是getSymbol
将与符号对应的数据加载到全局环境中,符号仍然是字符类型的向量。因此sym
只是一个字符并不真正包含数据。
您可以使用get
功能访问附加了相应符号名称的数据。像这样:
require(TTR)
require(quantmod)
symbols <- c("XLF", "XLK", "XLU")
getSymbols(symbols, src='yahoo', from = '2015-01-01')
SMA_Symbols <- lapply(symbols, function(sym, column) {
SMA(na.omit(get(sym))[,4],20)
})
head(SMA_Symbols[[1]][-(1:19)])
SMA
2015-01-30 23.7580
2015-02-02 23.6905
2015-02-03 23.6685
2015-02-04 23.6620
2015-02-05 23.6550
2015-02-06 23.6395