我正试图编写一个函数,列出全局环境中数据帧的名称。
我可以通过使用代码来做到这一点:
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
,然后将sapply
与is.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
参数来查找另一种类型,则可以使用上述方法。