以下代码返回一个名为“GLD”的字符串。
CatItUp <- function(x){
print(x)
}
CatItUp("GLD")
此代码返回GLD价格的尾部。但显然,因为我已经将GLD硬编码到函数中。
IAmMoney <- function(x) {
require("quantmod")
getSymbols("GLD")
tail(GLD)
}
IAmMoney("GLD")
这不会像硬编码版本那样返回价格,而是像上面的CatItUp()示例那样返回“GLD”字符串。我不知道为什么。
IAmMoney <- function(x) {
require("quantmod")
getSymbols("x")
tail(x)
}
IAmMoney("GLD")
如何在IAmMoney()函数中将'GLD'传递给quantmod :: getSymbols函数?
答案 0 :(得分:3)
tail(get(x))
会工作吗?
答案 1 :(得分:1)
这很棘手,因为quantmod会创建一个数据框,其名称与分配给x的字符串相同。所以首先你需要一个字符串值,然后你要用x的名字调用一个数据帧。这正是do.call()有用的。
IAmMoney <- function(x) {
require("quantmod")
getSymbols(x)
tail(get(x))
# changed to get(x) per Ahala's input below.
# if you had many params you were passing, do.call()
# might make more sense
}
IAmMoney("GLD")
Dirk指出使用auto.assign=FALSE
参数意味着你可以简单地这样做:
tail(getSymbols("GLD", auto.assign=FALSE))
答案 2 :(得分:1)
您是不是只是忽略了getSymbols()
有auto.assign
选项的事实?
所以你可能想要这个:
R> library(quantmod)
R> silly <- function(sym) {
+ x <- getSymbols(sym, auto.assign=FALSE)
+ tail(x)
+ }
R> silly("IBM")
IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted
2010-12-03 144.25 145.68 144.25 145.38 3710600 145.38
2010-12-06 144.54 145.87 144.52 144.99 3321800 144.99
2010-12-07 146.02 146.30 143.87 144.02 4828600 144.02
2010-12-08 144.35 145.65 143.84 144.98 4961400 144.98
2010-12-09 145.94 145.94 143.52 144.30 4405300 144.30
2010-12-10 144.88 144.95 143.73 144.82 3503800 144.82
R> silly("C")
C.Open C.High C.Low C.Close C.Volume C.Adjusted
2010-12-03 4.38 4.46 4.35 4.45 360277300 4.45
2010-12-06 4.45 4.50 4.43 4.45 445170000 4.45
2010-12-07 4.55 4.65 4.54 4.62 3265796000 4.62
2010-12-08 4.61 4.64 4.55 4.64 913820900 4.64
2010-12-09 4.68 4.71 4.64 4.69 731119000 4.69
2010-12-10 4.70 4.77 4.66 4.77 763156100 4.77
R>
getSymbols()
默认行为“我会将它作为一个新变量粘贴到您的环境中”或多或少是一个设计缺陷,而且我记得,已经认识到这一点。
因此auto.assign
可以改变行为。