Как вы берете строку, а затем вызовите кадр данных с именем = эту строку?

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

  •  08-10-2019
  •  | 
  •  

Вопрос

Следующий код возвращает строку под названием «GLD».

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

CatItUp("GLD")

Этот код возвращает хвост цен на глд. Но, очевидно, потому что я жестко закодировал GLD в функцию.

IAmMoney <- function(x) {

    require("quantmod")

    getSymbols("GLD")

    tail(GLD)   

}

IAmMoney("GLD")

Это не возвращает цены, такие как жесткая кодированная версия, но строка «GLD», как пример CATITUP () выше. Я не знаю почему.

IAmMoney <- function(x) {

    require("quantmod")

    getSymbols("x")

    tail(x) 

}

IAmMoney("GLD")

Как вы можете пройти «GLD» на QuantMod :: Функция Getsymbols внутри функции iammoney ()?

Это было полезно?

Решение

Вы не просто с видом на тот факт, что 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. Это именно то, что 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")

Дирк указал, что использование auto.assign=FALSE Аргумент, который означает, что вы можете просто сделать это вместо этого:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top