使用lapply与股票代码列表

时间:2016-05-22 05:36:37

标签: r quantmod

我正在尝试使用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”)

1 个答案:

答案 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