How to call an object with the character variable of the same name

旧时模样 提交于 2021-01-29 13:20:46

问题


I'm trying to write a function in R to batch-analyse a number of files in a similar manner. The files are of class ExpressionSetIllumina. I can make a character (string) vector with names of all files in the directory and load each of them:

list = list.files()
for (i in list[1]) {    
  load(i)
}

This loads files correctly

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

What I want to do now is to use i (character string "SSD.BA.vsn") to assign object SSD.BA.vsn to a new object data so that:

>data = SomeFunction(i)
>class(data)
[1] "ExpressionSetIllumina"
attr(,"package")
[1] "beadarray"

But whatever I've tried so far just returns data as a character vector of the same value as i or doesn't work at all. So I wonder if there's a function that would do it for me or whether I need to go about it some other way.

I have the name of an object or variable stored as a string in a character vector. How can I use the string object name to do something to the object?


回答1:


I think you want get.

data <- get(i)

That said, once you start using get (and its counterpart, assign), you usually end up with horrible unreadable code.

For batch analyses like yours, it is often better to read all your data into a list of data frames, then make liberal use of lapply. Something like:

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

mget is the version of get that retrieves multiple variables at once. Here it is used to retrieve all the things that were loaded by the call to load.

Now you have a list of lists: the top level list is related to the file, lower level lists contain the variables loaded from that file.



来源:https://stackoverflow.com/questions/63593520/how-to-reference-the-object-that-name-is-obtaine-through-a-paste-in-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!