代码之家  ›  专栏  ›  技术社区  ›  OnLeRo

按字符串模式选择向量[重复]

  •  0
  • OnLeRo  · 技术社区  · 5 年前

    我试图在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"
    

    但是我到目前为止尝试的方法只是返回数据作为一个与我值相同的字符向量,或者根本不起作用。所以我想知道是否有一个函数可以为我做这件事,或者我是否需要用其他的方法。

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

    0 回复  |  直到 7 年前
        1
  •  68
  •   Richie Cotton Joris Meys    10 年前

    我想你想要 get .

    data <- get(i)
    

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

    对于像您这样的批处理分析,最好将所有数据读入数据帧列表,然后自由地使用 lapply . 比如:

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

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

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