通过使用包含多个字符串的向量来引用变量

时间:2019-06-28 18:46:45

标签: r quantmod

我正在使用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 )来引用全局环境中的变量。

非常感谢!

0 个答案:

没有答案