【问题标题】:Work with loaded object name in R在 R 中使用加载的对象名称
【发布时间】:2015-12-16 21:43:17
【问题描述】:

我正在尝试将文件夹中的每个数据集加载到 R 中,通过函数运行它,将输出存储在列表中,然后在继续下一个之前将其删除。

datNames <- list.files(path = "/Some/Path/", pattern = "dl2*")
storeList <- vector(mode = "list", length = length(datNames)
for (i in 1:length(datNames) {
  load(file = paste0("/Some/Path/", datNames[i]))
  storeList[[i]] <- foo(<Name of data here>)
  rm(<Name of data here>) }

所以基本上我想做类似上面的事情,但我不知道在“这里的数据名称”中输入什么。感谢您的任何建议。

【问题讨论】:

    标签: r object naming


    【解决方案1】:

    我建议在单独的环境中加载。然后删除该环境中的每个对象。例如,请参见下面的代码,尽管它可以针对一个文件进行概括。如果对于具有多个对象的 .R 文件需要,它还可以轻松修复以循环遍历环境中的所有对象并将它们存储在列表列表中。

    x <- rnorm(100)
    save(x, file = "env_example.R")
    datEnv <- new.env()
    datNames <- list.files(pattern = "env_example.R")
    storeList <- vector(mode = "list", length = length(datNames))
    for (i in 1:length(datNames)) {
      load(file = datNames[i], envir = datEnv)
      storeList[[i]] <- datEnv[[ls(datEnv)[1]]]
      rm(list = ls(envir=datEnv), envir = datEnv) 
    
    }
    

    【讨论】:

    • 我有这个权利吗:运行 new.env() 会在 datEnv 而不是全局的那一点之后将所有内容加载到工作区中,对吗?这就是为什么删除 datEnv 中的所有对象不会破坏 new.env() 之前存在于全局环境中的任何函数或其他对象?
    • 几乎,在我上面的代码中,我创建了一个名为 datEnv 的新环境。在上面的示例中,我明确地将对象加载到该环境中。并不是说在那之后加载到工作区的所有内容都在 datEnv 中。请试试这个例子:datEnv &lt;- new.env(); ls(datEnv); ls(); datEnv$x &lt;- 2; z &lt;- 1; ls(datEnv); ls()。如果我没有明确地将对象放入该环境,它们仍将进入全局环境。这就是为什么 z 在全局环境中而 x 不在的原因。 Hadley Wickham 有一个很棒的环境教程:adv-r.had.co.nz/Environments.html
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2015-12-28
    • 2021-10-16
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多