【问题标题】:Llist dataframe names in Global environment [duplicate]列出全局环境中的数据框名称[重复]
【发布时间】:2020-12-22 16:40:27
【问题描述】:

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

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

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

我需要把它转换成一个我可以轻松调用的函数。

【问题讨论】:

  • 您也可以使用data.table 库并从中使用函数tables() - 此函数还显示表的大小(nrow、ncol、RAM 量)
  • 虽然这是专门询问如何将其变成一个函数,但这部分就像function.name &lt;- function() { Whatever solution you have } 一样简单。这是R编程的基础之一,属于缺乏研究。除了我上面提到的部分之外,这里的所有答案都可以在我结束这个问题的欺骗目标中找到。请在重新开放之前考虑这一点。其他选项会以表明缺乏研究的评论结束。 p.s. PJC 这不是针对你的,只是一个评论来澄清我的想法。干杯,欢迎来到 SO :)
  • 谢谢 M--。我有很多东西要学!

标签: r function dataframe


【解决方案1】:

您必须知道ls() 默认列出当前 环境中的对象。如果将代码包装在一个函数中,这个 current 环境就是内部 function 环境,此时它是空的(我们在函数的第一行,什么都没有尚未定义)。由于您对全局环境感兴趣,因此您必须使用.GlobalEnv 明确指定:

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

lsf()

【讨论】:

  • 也许将envir = .GlobalEnv也传递给get函数更具体
  • @inscaven 好主意,编辑了我的答案。
  • 非常感谢。不包括.GlobalEnv 是一个现在看起来很明显的疏忽!谢谢!
【解决方案2】:

您可以在环境中使用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 参数来查找其他类型,您可以使用上述方法。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2018-12-23
      • 2021-09-23
      • 1970-01-01
      • 2022-11-07
      • 2021-08-16
      • 1970-01-01
      相关资源
      最近更新 更多