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))
我更喜欢这个解决方案,因为我发现编码器更清晰、更容易理解。
我在 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))
我更喜欢这个解决方案,因为我发现编码器更清晰、更容易理解。