我试图在R中编写一个函数,以类似的方式批量分析许多文件。这些文件属于ExpressionSetIllumina
类。我可以使用目录中所有文件的名称制作一个字符(字符串) vector ,并加载每个文件:
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"
但是到目前为止,我所做的任何事情都只是将数据作为字符 vector 返回与i相同的值,或者根本不起作用。因此,我想知道是否有一个函数可以为我完成任务,还是我需要以其他方式解决这个问题。
我有一个以字符串形式存储在字符 vector 中的对象或变量的名称。如何使用字符串对象名称对对象执行某些操作?
最佳答案
我认为您想要 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
的版本,可一次检索多个变量。在这里,它用于检索调用调用所加载的所有内容。现在,您有了一个列表列表:顶级列表与文件相关,低级列表包含从该文件加载的变量。