オブジェクト名からオブジェクトを生成する

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))

(参考資料)