如何使用相同名称的字符变量调用对象

Oph*_*rix 35 r r-faq

我正在尝试在R中编写一个函数,以类似的方式批量分析大量文件.这些文件属于类ExpressionSetIllumina.我可以创建一个字符(字符串)向量,其中包含目录中所有文件的名称,并加载每个文件:

list = list.files()
for (i in list[1]) {    
  load(i)
}
Run Code Online (Sandbox Code Playgroud)

这会正确加载文件

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

我现在要做的是使用i(字符串"SSD.BA.vsn")将对象分配SSD.BA.vsn给新的对象数据,以便:

>data = SomeFunction(i)
>class(data)
[1] "ExpressionSetIllumina"
attr(,"package")
[1] "beadarray"
Run Code Online (Sandbox Code Playgroud)

但是到目前为止我所尝试的只是将数据作为与i相同值的字符向量返回,或者根本不起作用.所以我想知道是否有一个功能可以为我做,或者我是否需要以其他方式去做.

我将一个对象或变量的名称存储为字符向量中的字符串.如何使用字符串对象名称对对象执行某些操作?

Ric*_*ton 55

我想你想要的get.

data <- get(i)
Run Code Online (Sandbox Code Playgroud)

也就是说,一旦你开始使用get(及其对应物assign),你通常会得到可怕的不可读代码.

对于像您这样的批量分析,通常最好将所有数据读入数据框列表,然后自由使用lapply.就像是:

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

mgetget一次检索多个变量的版本.这里它用于检索加载调用加载的所有内容.

现在您有一个列表列表:顶级列表与文件相关,下级列表包含从该文件加载的变量.