R 不希望变量名由字符串设置

R 不希望变量名由字符串设置,r,R,在下面的R代码中,如果我想为SPY以外的符号提取和分析数据,我需要替换字符串“SPY”和变量名SPY。 如何编写代码,使股票代码只设置在一个位置 library("quantmod") getSymbols("SPY", from = '1990-01-01') print(summary(monthly.prices <- Ad(SPY)[endpoints(SPY, on = 'months')])) sym = "SPY" # line below does not work pri

在下面的R代码中,如果我想为SPY以外的符号提取和分析数据,我需要替换字符串“SPY”和变量名SPY。 如何编写代码,使股票代码只设置在一个位置

library("quantmod")
getSymbols("SPY", from = '1990-01-01')
print(summary(monthly.prices <- Ad(SPY)[endpoints(SPY, on = 'months')]))
sym = "SPY"
# line below does not work
print(summary(monthly.prices <- Ad(sym)[endpoints(sym, on = 'months')]))
library(“quantmod”)
getSymbols(“间谍”,from='1990-01-01')

打印(summary)(monthly.prices您可以设置一个变量
symbol=“SPY”
,然后使用
eval(parse(text=symbol))
调用实际变量。请注意,这可能不是一个好的做法,而且很难读取/维护。

您可以设置一个变量
symbol=“SPY”
,然后使用
eval(parse(text=symbol))
调用实际变量。请注意,这可能不是很好的做法,而且很难读取/维护。

当我运行
getSymbols
时,它会生成一个我不完全理解的警告(我也不知道该特定函数应该做什么),但我认为这与你问题的核心无关

两个选择

选项1

eval(parse(text=x))
将字符
x
作为表达式进行计算。也就是说,它相当于在运行时用
x
的值替换该代码位

library("quantmod")
sym <- "SPY"
getSymbols(sym, from = '1990-01-01')
q1 <- summary(Ad(SPY)[endpoints(SPY, on = 'months')])
xts_obj <- eval(parse(text = sym))
q2 <- summary(Ad(xts_obj)[endpoints(xts_obj, on = 'months')])
print(all(q1==q2))

当我运行
getSymbols
时,它会生成一个我不完全理解的警告(我也不知道该特定函数应该做什么),但我认为这与您问题的核心无关

两个选择

选项1

eval(parse(text=x))
将字符
x
作为表达式进行计算。也就是说,它相当于在运行时用
x
的值替换该代码位

library("quantmod")
sym <- "SPY"
getSymbols(sym, from = '1990-01-01')
q1 <- summary(Ad(SPY)[endpoints(SPY, on = 'months')])
xts_obj <- eval(parse(text = sym))
q2 <- summary(Ad(xts_obj)[endpoints(xts_obj, on = 'months')])
print(all(q1==q2))

您可以编写一个将股票代码作为输入的函数。请注意,在
getSymbols()
中设置
auto.assign=FALSE
允许我们分配任何变量名(这里我称之为
dat
)直接。然后我们在整个函数中使用
dat
。这样,您也可以轻松运行其他符号,而无需更改代码中的任何内容

symFun <- function(sym) {
    dat <- getSymbols(sym, from = "1990-01-01", auto.assign = FALSE)
    monthly.prices <- Ad(dat)[endpoints(dat, on = "months")]
    summary(monthly.prices)
}

symFun("SPY")
#     Index             SPY.Adjusted   
# Min.   :1993-01-29   Min.   : 28.60  
# 1st Qu.:1998-11-06   1st Qu.: 70.31  
# Median :2004-08-15   Median : 95.23  
# Mean   :2004-08-14   Mean   : 97.93  
# 3rd Qu.:2010-05-21   3rd Qu.:117.27  
# Max.   :2016-02-19   Max.   :208.17  

symFun您可以编写一个将股票代码作为输入的函数。请注意,在
getSymbols()
中设置
auto.assign=FALSE
允许我们分配任何变量名(这里我称之为
dat
)直接。然后我们在整个函数中使用
dat
。这样,您也可以轻松运行其他符号,而无需更改代码中的任何内容

symFun <- function(sym) {
    dat <- getSymbols(sym, from = "1990-01-01", auto.assign = FALSE)
    monthly.prices <- Ad(dat)[endpoints(dat, on = "months")]
    summary(monthly.prices)
}

symFun("SPY")
#     Index             SPY.Adjusted   
# Min.   :1993-01-29   Min.   : 28.60  
# 1st Qu.:1998-11-06   1st Qu.: 70.31  
# Median :2004-08-15   Median : 95.23  
# Mean   :2004-08-14   Mean   : 97.93  
# 3rd Qu.:2010-05-21   3rd Qu.:117.27  
# Max.   :2016-02-19   Max.   :208.17  
symFun