可以对存储在项目环境中的所有特定对象调用一个函数吗?

Possible to call a function to all particular objects stored in project environment?

我愚蠢地一直在 R 项目中创建大量新的 data_frames,试图在不进行适当提交的情况下解决特定问题。在检查了所有实用名称和大部分希腊字母表之后,我现在拥有一个充满 data_frame 个对象的环境,这些对象的名称如 'bob'、'might.work'、'almostthere'。我想使用循环函数 - lapply 或其他 - return 一些指标,这些指标会告诉我有关环境中每个数据框对象的信息。然后我可以根据 return 清理 up/delete。

那么在R项目环境下是否可以使用lapply访问所有data_frames?是这样的吗?

lapply(environment, function (x){
  if(is.dataframe(x)){
  dplyr::glimpse(x)
}
}

谢谢。

当然可以!

lapply(ls(),function(x){
  o = get(x,envir = globalenv())
  cat("if"(is.data.frame(o),paste0(x," is a data frame!\n"),"Nope.\n"))
})
  • ls() 将列出环境中的所有对象名称(默认为全局)。
  • 由于这只是一个名称,我们需要 get 值但指定全局环境(因为此时我们处于函数环境中)
  • 然后我 cat 如果它是一个数据框,但你可以用 o 对象做任何你想做的事。

下面的函数会return继承自classdata.frame环境environ的对象,默认为.GlobalEnv.

getDataFrames <- function(environ = .GlobalEnv){
    l <- ls(name = environ)
    res <- NULL
    for(i in seq_along(l)){
        r <- inherits(get(l[i], envir = environ), "data.frame")
        if(r) res <- c(res, l[i])
    }
    res
}

getDataFrames()

eapply() 函数可以轻松迭代环境中的对象

eapply(globalenv(), function(x) if (is.data.frame(x)) dplyr::glimpse(x))