2012-01-31 13 views
23

同様の方法でいくつかのファイルをバッチ分析するために、Rで関数を記述しようとしています。ファイルはクラスExpressionSetIlluminaです。私は、ディレクトリ内のすべてのファイルの名前を持つ文字(文字列)ベクトルを作成し、それらのそれぞれをロードすることができます。同じ名前の文字変数でオブジェクトを呼び出す方法

list = list.files() 
for (i in list[1]) {  
    load(i) 
} 

これは私が今やりたいことを使用するように正しく

> ls() 
[1] "i"     "list"     "SSD.BA.vsn" 
> class(SSD.BA.vsn) 
[1] "ExpressionSetIllumina" 
attr(,"package") 
[1] "beadarray" 

あるファイルをロードしますiように、新しいオブジェクトデータにオブジェクトSSD.BA.vsnを割り当てる(文字列"SSD.BA.vsn"):

>data = SomeFunction(i) 
>class(data) 
[1] "ExpressionSetIllumina" 
attr(,"package") 
[1] "beadarray" 

でも何でも、私は今のところちょうどリターンを試してみましたデータは、iと同じ値の文字ベクトルとして、またはまったく動作しません。だから私のためにそれをする機能があるのか​​、それとも何か別の方法でそれをする必要があるのか​​どうか疑問に思う。

私はオブジェクトまたは変数の名前を文字ベクトルに文字列として格納しています。文字列オブジェクト名を使用してオブジェクトに何かを行うにはどうすればよいですか?

答えて

31

私はあなたがほしいと思うと思うget

あなたが get(およびその対応、 assign)を使用して起動したら、あなたは通常、恐ろしい読めないコードになってしまう、と述べ
data <- get(i) 

あなたのようなバッチ分析の場合は、すべてのデータをデータフレームのリストに読み込んで、lapplyを自由に使用する方がよい場合がよくあります。ような何か:

data_files <- list.files() 
all_vars <- lapply(data_files, function(file) 
{ 
    vars_loaded <- load(file) 
    mget(vars_loaded, parent.frame()) 
}) 

mgetは、一度に複数の変数を取得しgetのバージョンです。ここでは、ロードの呼び出しによってロードされたすべてのものを取り出すために使用されます。

リストのリストがあります。最上位リストはファイルに関連し、下位レベルリストにはそのファイルからロードされた変数が含まれます。

+0

ちょうど必要なもの。ありがとうございました!しかし、コードの読みやすさを念頭に置いてお勧めします。 – Ophiothrix

関連する問題