web-dev-qa-db-ja.com

同じ名前の文字変数でオブジェクトを呼び出す方法

同様の方法で多数のファイルをバッチ分析する関数を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と同じ値の文字ベクトルとして返すか、まったく機能しません。だから、私のためにそれを行う機能があるのか​​、それとも他の方法でそれを実行する必要があるのか​​疑問に思う。

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

34
Ophiothrix

get が必要だと思います。

data <- get(i)

つまり、get(および対応する assign )の使用を開始すると、通常は恐ろしく読みにくいコードになります。

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

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

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

これでリストのリストができました。トップレベルのリストはファイルに関連しており、下位レベルのリストにはそのファイルからロードされた変数が含まれています。

50
Richie Cotton