Как вы берете строку, а затем вызовите кадр данных с именем = эту строку?
Вопрос
Следующий код возвращает строку под названием «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))