Wie nehmen Sie eine Zeichenfolge und dann einen Datenrahmen mit Namen nennen = die Zeichenfolge?

StackOverflow https://stackoverflow.com/questions/4414580

  •  08-10-2019
  •  | 
  •  

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?

War es hilfreich?

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))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top