首页 > 解决方案 > 如何使用提取的字符串来调用 xts 数据对象?

问题描述

我想使用一串股票代码并循环遍历它将对拉入代码块进行分析。我可以让循环拉入数据,但是我想将数据分配给通用数据元素,这样我就可以通过我的代码运行它。无法以编程方式从列表中获取xts对象并使其执行 - 仅返回值。

library(quantmod)
library(xts)

asset1 = "ADBE"
asset2 = "VGT"

assets <- c(asset1, asset2)
assets       # This returns [1] "ADBE "VGT"

getSymbols(assets[1]) # All good so far this returns an xts object [1:3247] [1:6] called ADBE

如果我输入手动:

df01 = ADBE # This makes df01 the same as the data values for ADBE.
df01 <- assets[1] # makes df01 a character string equal to "ADBE"

问题:

如何使用资产中的值以编程方式使df01 = ADBE片段发生。当我使用 assets[1] 时,它会失败,因为我不想每次都输入股票代码,而是分配它,并且当我使用通用代码遍历 assets(n) 列表时。

我意识到这可能是一个简单的愚蠢问题,但它让我很难过,无法在线找到解决方案。

标签: rxtsquantmod

解决方案


将结果保存在一个列表中,默认情况下getSymbols将每个资产分配到环境中,我们可以通过使用来更改它auto.assign = FALSE,例如:

myResult <- lapply(assets, getSymbols, auto.assign = FALSE)
myResult <- setNames(myResult, assets)

# access using names
myResult$ADBE
#            ADBE.Open ADBE.High ADBE.Low ADBE.Close ADBE.Volume ADBE.Adjusted
# 2007-01-03     40.72     41.32    38.89      39.92     7126000         39.92
# ...

# or using a variable
assets[ 1 ]
# [1] "ADBE"
myResult[[ assets[ 1 ] ]]
#           ADBE.Open ADBE.High ADBE.Low ADBE.Close ADBE.Volume ADBE.Adjusted
# 2007-01-03     40.72     41.32    38.89      39.92     7126000         39.92
# ...

如果我们不希望将它们保留在列表中,则可以使用get

getSymbols(assets)
df01 <- get(assets[ 1 ])
df01
#            ADBE.Open ADBE.High ADBE.Low ADBE.Close ADBE.Volume ADBE.Adjusted
# 2007-01-03     40.72     41.32    38.89      39.92     7126000         39.92
# ...

推荐阅读