r-列出全局环境中的数据帧名称



我正试图编写一个函数,列出全局环境中数据帧的名称。

我可以通过使用代码来做到这一点:

l<-ls()
l[sapply(l, function(x) is.data.frame(get(x)))]

我需要将其转换为一个可以轻松调用的函数。

您必须注意,默认情况下,ls()会列出当前环境中的对象。如果您将代码封装在函数中,则当前环境是内部函数环境,此时该环境为空(我们位于函数的第一行,尚未定义任何内容(。由于您对全局环境感兴趣,因此必须使用.GlobalEnv:明确指定

lsf <- function() {
l<-ls(.GlobalEnv)
l[sapply(l, function(x) is.data.frame(get(x, envir = .GlobalEnv)))]
}
lsf()

也许你可以试试下面的代码

list.df <- function() names(Filter(is.data.frame,mget(ls())))

您可以在环境中使用as.list,然后将sapplyis.whatever一起使用,如下所示:

list_all_x <- function(is.x = is.data.frame, env = .GlobalEnv){
env <- as.list(env)
names(env)[sapply(env, is.x)]
}
# or related to ThomasIsCoding's great answer
list_all_x <- function(is.x = is.data.frame, env = .GlobalEnv)
names(Filter(is.x, as.list(env)))
# check the function
d1 <- numeric()
d2 <- data.frame()
d3 <- data.frame()

list_all_x()
#R> [1] "d2" "d3"
list_all_x(is.x = is.numeric)
#R> [1] "d1"

如果您想使用env参数将函数应用于另一个环境,或者通过如上所示更改is.x参数来查找另一种类型,则可以使用上述方法。

最新更新