在下面的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')]))
答案 0 :(得分:3)
您可以编写一个将股票代码作为输入的函数。请注意,在auto.assign = FALSE
中设置getSymbols()
可让我们直接指定任何变量名称(此处我称之为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
答案 1 :(得分:2)
您可以设置变量eval(parse(text=symbol))
,然后使用def main():
a = 1
b = 2
c = a + b
print("total", a + b + c)
if __name__ == "__main__":
main()
来调用实际变量。请注意,这可能不是很好的练习,也很难阅读/维护。
答案 2 :(得分:1)
当我运行getSymbols
时,它会产生一个我不完全理解的警告(我也不知道该特定功能应该做什么),但我不会&#39 ;认为它与你问题的核心相关。
两个选项......
选项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))
选项2
这更干净,但只有getSymbols
默认功能才可以通过auto.assign
参数覆盖。如果函数总是进行<<-
样式赋值,那么您可以做的最好的事情就是创建一个包装函数
library("quantmod")
sym <- "SPY"
getSymbols(sym, from = '1990-01-01', auto.assign = T)
q1 <- summary(Ad(SPY)[endpoints(SPY, on = 'months')])
q2 <- getSymbols(sym, from = '1990-01-01', auto.assign = F)
print(all(q1==q2))