我正在使用R通过Quantmod的 getSymbols()函数从Yahoo提取财务数据。我使用字符向量Tickers作为 getSymbols()中的第一个参数,然后该函数创建从 Tickers 向量传递的每个符号的xts对象。然后,我想将各种xts对象合并为一个对象,以对其进行进一步的分析。我不想输入每个新对象的名称,而是想参考原始的 Tickers 向量,并使用其内容(字符串向量)来引用新创建的对象/变量。
到目前为止,我已经弄乱了以下功能的各种组合,但是没有运气:
分配(股票代码,合并(股票代码))
eval(parse(text = Ticker)---这似乎很有希望,但只返回了Ticker向量中的 last 对象。到目前为止,到目前为止。
get()
名称/ as.symbol
rlang :: syms()
library(tidyverse)
library(quantmod)
# Symbol List
Tickers <- c("RY", "TD", "BNS", "BMO", "CM")
# From To
StartDate <- as.Date("2001-01-01", format = "%Y-%m-%d")
EndDate <- Sys.Date()
# Symbol Lookup Function
SymLookup <- function(ticker, from){
assign(ticker, getSymbols(ticker, from = StartDate, to = EndDate, auto.assign = FALSE)[,6], pos = 1)
}
# Retrieving price data from Yahoo Finance
for (i in seq_along(Tickers)) {
SymLookup(Tickers[i],StartDate)
}
### At this point we have 5 newly created xts objects which all have variable
### names corresponding to the 5 character strings in the Tickers vector
### i.e. RY is now an xts object from 2001-01-01 to today etc.
### Attempting to systematically merge XTS dataframes together
BtBB <- assign(BtBB_syms, merge(BtBB_syms))
# Doesn't work - no default value for "y" which is missing
BtBB <- merge(eval(parse(text = Tickers)))
# This works, but only creates a merged data.frame with
# the last instance of Tickers, CM
BtBB <- merge(as.name(Tickers))
# Cannot coerce class `"name"` to a data.frame
BtBB <- merge(rlang::syms(Tickers))
# Same error as first attempt with assign function
我希望创建一个合并的xts对象,其中包含 n 个列,这些列是根据我输入到初始 Tickers 向量中的许多符号创建的。
基本上,我试图通过使用之前创建的字符串向量( plural )来引用全局环境中的变量。
非常感谢!