使用 lapply 和股票代码列表
Using lapply with a list of stock symbols
我正在尝试使用 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)
})
我收到错误:
Error in sym[, 4] : incorrect number of dimensions Called from:
inherits(x, "xts")
你的第二种方法不起作用的原因是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
我正在尝试使用 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)
})
我收到错误:
Error in sym[, 4] : incorrect number of dimensions Called from: inherits(x, "xts")
你的第二种方法不起作用的原因是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