文字列をどのように取り、名前=その文字列でデータフレームを呼び出しますか?
質問
次のコードは、「GLD」と呼ばれる文字列を返します。
CatItUp <- function(x){
print(x)
}
CatItUp("GLD")
このコードは、GLD価格の尾を返します。しかし、明らかに、私はgldを関数にハードコーディングしたためです。
IAmMoney <- function(x) {
require("quantmod")
getSymbols("GLD")
tail(GLD)
}
IAmMoney("GLD")
これは、ハードコーディングされたバージョンのような価格を返すのではなく、上記のCatitup()の例のような「GLD」文字列です。どうしてか分かりません。
IAmMoney <- function(x) {
require("quantmod")
getSymbols("x")
tail(x)
}
IAmMoney("GLD")
iammoney()関数内のQuantMod :: getSymbols関数に「GLD」を渡すにはどうすればよいですか?
解決
あなたは単にその事実を見落としていませんか 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))
所属していません StackOverflow