Wie nehmen Sie eine Zeichenfolge und dann einen Datenrahmen mit Namen nennen = die Zeichenfolge?
Frage
Der folgende Code gibt eine Zeichenfolge namens "GLD".
CatItUp <- function(x){
print(x)
}
CatItUp("GLD")
Dieser Code gibt den Schwanz von GLD Preisen. Aber natürlich, weil ich hart codierte GLD in die Funktion.
IAmMoney <- function(x) {
require("quantmod")
getSymbols("GLD")
tail(GLD)
}
IAmMoney("GLD")
Das gibt nicht die Preise wie die hartcodierte Version, aber der „GLD“ string wie die CatItUp () Beispiel oben. Ich weiß nicht, warum.
IAmMoney <- function(x) {
require("quantmod")
getSymbols("x")
tail(x)
}
IAmMoney("GLD")
Wie kann man 'GLD' zum quantmod :: getSymbols Funktion innerhalb der IAmMoney () Funktion übergeben?
Lösung
Sind Sie nicht einfach mit Blick auf die Tatsache, dass getSymbols()
hat eine Option auto.assign
?
So können Sie diese stattdessen wünschen können:
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()
Standardverhalten von „Ich kann es in Ihrer Umgebung als neue Variable kleben“ ist mehr oder weniger ein Konstruktionsfehler und, wie ich mich erinnere, als solche anerkannt.
Und daher kann das Verhalten von auto.assign
verändert werden.
Andere Tipps
Will tail(get(x))
Arbeit?
Es ist schwierig, weil quantmod einen Datenrahmen erzeugt, dessen Name ist der gleiche wie der Zeichenfolge, die Sie assign x. So benötigen Sie zunächst einen String-Wert dann später werden Sie mit dem Namen x einen Datenrahmen aufrufen. Dies ist genau das, was do.call () ist hilfreich für.
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 wies darauf hin, dass die Verwendung des auto.assign=FALSE
Arguments, das Mittel Sie dies einfach tun können, statt:
tail(getSymbols("GLD", auto.assign=FALSE))