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