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

3

我在R中有以下代码:

library(quantmod)

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

chartSeries(Cl(STOXX50E))

这段代码简单地下载了欧洲欧元区的时间序列,然后绘制收盘价。它按预期工作。无论如何,我想知道如何避免每次都明确写出“STOXX50E”以引用此变量。例如,我希望能够使用通用名称(如“INDEX”)引用包含数据的变量,这样当我想要使用另一个指数运行代码时,就不需要更改所有调用。
例如,如果我想要下载和绘制标准普尔500指数的收盘价,我必须执行以下操作:
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设置了名称,就不必更改其余的代码。但是这并不起作用。 我该如何实现这一点?

2个回答

3

使用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))

我更喜欢这个解决方案,因为我觉得代码更清晰易懂。


1
你可以这样做:

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,而不必更改其他任何东西就可以运行代码!

enter image description here

编辑:

从可读性和避免标题中的烦人的^方面讲,这可能是一种更好的方式:

library(quantmod)

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

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

enter image description here


1
太好了!谢谢你。你知道怎么去掉图表中的标题吗?现在,在你修复之后,名称非常长... - opt
1
不客气!我更新了我的答案。为了改变你传递的名称,你需要使用 name 参数。 - LyzandeR
1
我还提供了一个更清晰的解决方案的编辑,我认为它看起来更漂亮。它使用 paste 函数为 getSymbols 函数添加 ^,然后只是简单地使用 get 函数来进行 chartSeries - LyzandeR
1
哦,如果你想完全删除名称,只需使用''作为名称。 - LyzandeR
1
太好了。问题解决了,谢谢你,我学到了新的东西。 - opt
非常高兴能够帮上忙 :) !! - LyzandeR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接