这可能是一个非常简单的问题,但我在互联网上找了几个小时,没有任何想法 - 这就是为什么我在这里问。
我有一个csv文件与股票符号(如DAI.F,PAH3.F,GRU.F,...)。使用软件包quantmod,我从雅虎获得历史股票数据,并为每个股票符号在我的工作区创建了一个与符号名称相同的xts-Object。
我的问题是,我不知道如何根据csv文件的内容循环浏览这些xts-objects。这些名称以字符串的形式存储在 symbols_watchlist
代码的最后一行是问题所在。stock <- symbols_watchlist[i]
stock
应该是xts -objects中的一个,在每个循环中被导入。有了 stock <- symbols_watchlist[i]
它只是变成了一个字符串,其中包含了从 symbols_watchlist
- 请看附图(RStudio中的工作空间示例)。
library(quantmod)
library(tidyquant)
library(readr)
start_date_5year <- Sys.Date()-1826
end_date <- Sys.Date()
watchlist <- read.csv("D:/Watchlist.csv", header = TRUE, sep = ";")
symbols_watchlist <- watchlist$Yahoo_label
getSymbols(watchlist$Yahoo_label,src='yahoo', from = start_date_5year, to = end_date)
for (i in 1:length(symbols_watchlist)){
stock <- symbols_watchlist[i]
}
RStudio中的工作空间示例
你可以使用 mget
来获取列表中的所有符号。
list_of_symbols <- mget(symbols_watchlist)
然后您可以使用 lapply
来循环它们,并对它们中的每一个应用任何函数。
lapply(list_of_symbols, function(x) {
#Do something with each symbol
})
使用 for
循环,你可以用 get
.
for (i in symbols_watchlist) {
stock <- get(i)
#Do something with stock
}
你必须决定你想要什么作为你的最终结果和哪个框架工作。你用的是tidyquant,但用的是 getSymbols
从quantmod获取数据。你可以得到一个xts对象的列表或者一个包含所有数据的data.frame。
使用quantmod(不需要tidyquant),得到一个xts对象的列表。
library(quantmod)
symbols_watchlist <- c("DAI.F", "GRU.F", "IQ8.F", "PAH3.F")
start_date_5year <- Sys.Date()-1826
end_date <- Sys.Date()
stocks <- lapply(symbols_watchlist, getSymbols, from = start_date_5year, to = end_date, auto.asssign = FALSE)
names(stocks) <- symbols_watchlist
使用tidyquant,得到一个data.frame。
library(tidyquant)
df_stocks <- tq_get(symbols_watchlist, from = start_date_5year, to = end_date)