オブジェクト名からオブジェクトを生成する
Javaのリフレクションのようなことができないか調べていた。
相変わらずRリテラシーは低いので、基本的なことから調べている。
さて、なぜこのようなことをしたいのかというと、前回「quantmodのgetSymbolsで取得した株価データから株価コードを取り出す」の逆のようなことをしたいから。
つまり、取得した株価コードから株価データを生成したい。
※)今回は面倒なので、株価コードを7203といった4桁の数値を意味するのではなく、接頭語YJがついたYJ7203を指すこととする。
まず前提として、次のようにstocksオブジェクトを生成していたとする。
※)同時にYJ7203オブジェクトとYJ4751オブジェクトも生成されていることが前提。
symbols <- c("YJ7203", "YJ4751") stocks <- getSymbols(symbols, from="2008-01-01", to="2016-02-12", src="yahooj", adjust=TRUE)
接頭語「YJ」付きの株価コードを取得してstockCodeに入れる。
> stockCode<-head(stocks)[1] > stockCode [1] "YJ7203"
paste関数とeval関数を使用してオブジェクトを生成する。
> yahooStockObject<-eval(parse(text=stockCode)) > head(yahooStockObject) YJ7203.Open YJ7203.High YJ7203.Low YJ7203.Close YJ7203.Volume 2008-01-04 5880 5890 5740 5780 8919700 2008-01-07 5700 5790 5670 5710 9519500 2008-01-08 5700 5730 5620 5710 9575900 2008-01-09 5610 5810 5600 5810 10014900 2008-01-10 5730 5790 5660 5660 9684200 2008-01-11 5740 5750 5610 5630 10288200 YJ7203.Adjusted 2008-01-04 5780 2008-01-07 5710 2008-01-08 5710 2008-01-09 5810 2008-01-10 5660 2008-01-11 5630
1つずつ見ていくと、主に2つ。
まずは、parse関数によってexpressionの取得。
> parse(text=stockCode) expression(YJ7203)
次に、eval関数を使用して文字列をそのまま R のスクリプトに変換して実行。
yahooStockObject<-eval(parse(text=stockCode))
(参考資料)