微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在全局环境中列出数据框名称

如何解决在全局环境中列出数据框名称

我正在尝试编写一个列出全局环境中数据框名称函数

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

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

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

解决方法

您必须注意,ls()默认情况下会列出 current 环境中的对象。如果将代码包装在函数中,则此 current 环境是内部 function 环境,该环境在此时为空(我们位于函数的第一行,没有任何内容已经定义)。由于您对全局环境感兴趣,因此必须使用.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参数来查找另一种类型,则可以使用上述方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。