我正在尝试在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相同的值,或者根本不起作用。所以我想知道是否有一个函数可以帮我解决这个问题,还是我需要以其他方式解决这个问题。

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

#1 楼

我认为您想要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())
})


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

现在您有了列表列表:顶层列表与文件相关,底层列表包含变量从该文件加载。

评论


正是所需要的。谢谢!但是我会牢记您对代码可读性的建议。

– phiphithrrix
2012年1月31日17:38