R:如何在使用变量时避免显式命名

R: how to avoid explicit names when using a variable

我在 R 中有以下代码:

library(quantmod)

mySymbol = "^STOXX50E"
getSymbols(mySymbol, from="2004-01-01", to=Sys.Date())

chartSeries(Cl(STOXX50E))

它只是下载 inder Eurostoxx 的时间序列,然后绘制收盘价。 它按预期工作。 无论如何,我想知道每次我想引用这个变量时如何避免明确地写 "STOXX50E" 。 例如,我希望能够引用包含具有通用名称(如 "INDEX" 的数据)的变量,这样当我想使用另一个 inder 启动代码时,我不需要更改所有调用。

例如,如果我想下载并绘制 S&P500 的收盘价,我必须这样做:

library(quantmod)

mySymbol = "^GSPC"
getSymbols(mySymbol, from="2004-01-01", to=Sys.Date())

chartSeries(Cl(GSPC))

所以我不仅要更改第二行的变量名,还要更改最后一行的变量名。 我宁愿更通用的东西,比如:

library(quantmod)

mySymbol = "^GSPC"
getSymbols(mySymbol, from="2004-01-01", to=Sys.Date())

chartSeries(Cl(mySymbol))

因此,一旦我为 mySymbol 设置了名称,就不必更改所有其余代码。但这不起作用。 我怎样才能做到这一点?

你可以这样做:

library(quantmod)

mySymbol = "^STOXX50E"
getSymbols(mySymbol, from="2004-01-01", to=Sys.Date())

chartSeries(Cl(get(substring(mySymbol,2,nchar(mysymbol)))))

如果你想更改情节的标题,请执行以下操作:

chartSeries(Cl(get(substring(mySymbol,2,nchar(mysymbol)))), name=mySymbol)

基本上,当您使用 getSymbols 时,一个名为 STOXX50E 的变量存储在包含数据的全局环境中。使用 get 您可以通过提供字符串来访问变量名称,即“^STOXX50E”。然后我使用 substring 来避免变量 mySymbol 的第一个字符 ^.

并且有效。您基本上更改了 mySymbol 并且代码无需更改任何其他内容即可运行!

编辑:

这可能是一种更好的方法,因为代码更具可读性,并且您可以避免标题中烦人的 ^

library(quantmod)

mySymbol = "STOXX50E"
getSymbols(paste('^',mySymbol,sep=''), from="2004-01-01", to=Sys.Date())

chartSeries(Cl(get(mySymbol)),name=mySymbol)

当前接受的解决方案的替代方法是在调用 getSymbols 时使用 auto.assign=FALSE

library(quantmod)
mySymbol <- "^STOXX50E"
x <- getSymbols(mySymbol, from="2004-01-01", to=Sys.Date(), auto.assign=FALSE)
chartSeries(Cl(x), name=mySymbol)
# If you want to remove the "^" from the name:
chartSeries(Cl(x), name=sub("^","",mySymbol,fixed=TRUE))

我更喜欢这个解决方案,因为我发现编码器更清晰、更容易理解。