r - 如何使用提取的字符串来调用 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) 列表时。
我意识到这可能是一个简单的愚蠢问题,但它让我很难过,无法在线找到解决方案。
解决方案
将结果保存在一个列表中,默认情况下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
# ...
推荐阅读
- c# - Azure Cosmos Lease Container 只为整个容器创建一个租约,即使有数千个分区
- node.js - 如何获取已初始化保管库的节点 js 应用程序代码中的秘密?
- python - Flask ValueError:matmul:输入操作数 1 在其核心维度 0 中不匹配
- heroku - Heroku 不下载新的 npm 包
- r - dplyr 1.0.2 中的 summarise() 作用类似于 mutate()
- excel - VBA - 运行时错误 1004:应用程序定义或对象定义错误
- javascript - javascript 不读取 html 中的值
- javascript - Error 对象似乎如何在 Javascript 上自行创建属性?
- python - 有没有办法在组织中部署 python 桌面应用程序?
- python - AttributeError:“SnowflakeCursor”对象没有属性“光标”