¿Cómo se toma una cadena y luego llama a una trama de datos con el nombre = esa cadena?

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

  •  08-10-2019
  •  | 
  •  

Pregunta

El código siguiente devuelve una cadena denominada "GLD".

CatItUp <- function(x){
    print(x)
}

CatItUp("GLD")

Este código devuelve la cola de precios GLD. Pero, obviamente, porque he GLD en forma fija en la función.

IAmMoney <- function(x) {

    require("quantmod")

    getSymbols("GLD")

    tail(GLD)   

}

IAmMoney("GLD")

Esto no devuelve los precios al igual que la versión codificada, pero el "GLD" cadena como el ejemplo CatItUp () anterior. No sé por qué.

IAmMoney <- function(x) {

    require("quantmod")

    getSymbols("x")

    tail(x) 

}

IAmMoney("GLD")

¿Cómo se puede pasar 'GLD' a la función quantmod :: getSymbols, dentro de la función IAmMoney ()?

¿Fue útil?

Solución

¿No simplemente pasando por alto el hecho de que tiene una getSymbols() auto.assign opción?

Así que es posible que desee esto en su lugar:

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() comportamiento predeterminado de "voy a pegarlo en su entorno como una nueva variable" es más o menos un defecto de diseño y, por lo que recuerdo, reconocido como tal.

Y por lo tanto, el comportamiento puede ser alterado por auto.assign.

Otros consejos

trabajará tail(get(x))?

Es difícil porque quantmod crea una trama de datos cuyo nombre es el mismo que la cadena se asigna a x. Así que al principio se necesita un valor de cadena, posteriormente, a la que llama una trama de datos con el nombre de x. Esto es exactamente lo do.call () es útil para.

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 señaló que el uso del argumento auto.assign=FALSE que significa que puede simplemente hacer esto en su lugar:

tail(getSymbols("GLD", auto.assign=FALSE))

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top