同様の方法で多数のファイルをバッチ分析する関数を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と同じ値の文字ベクトルとして返すか、まったく機能しません。だから、私のためにそれを行う機能があるのか、それとも他の方法でそれを実行する必要があるのか疑問に思う。
オブジェクトまたは変数の名前を文字ベクトルの文字列として保存しています。文字列オブジェクト名を使用してオブジェクトに何かを行うにはどうすればよいですか?
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
のバージョンです。ここでは、ロードの呼び出しによってロードされたすべてのものを取得するために使用されます。
これでリストのリストができました。トップレベルのリストはファイルに関連しており、下位レベルのリストにはそのファイルからロードされた変数が含まれています。