题
以下代码返回一个称为“ 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")
如何将“ GLD”传递到iammoney()函数内的QuantMod :: getsymbols函数?
解决方案
您不是只是忽略了一个事实 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
.
其他提示
将要 tail(get(x))
工作?
这很棘手,因为QuantMod创建一个数据框,谁的名称与您分配给x的字符串相同。因此,首先您需要一个字符串值,然后以X的名称调用数据框。这正是要做的。
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")
德克指出使用 auto.assign=FALSE
参数这意味着您可以简单地做到这一点:
tail(getSymbols("GLD", auto.assign=FALSE))
不隶属于 StackOverflow