如何从自定义环境中获取所有数据框对象

时间:2019-04-27 16:11:52

标签: r

我想在脚本中获取所有数据帧。 为此,我正在自定义环境中运行脚本。

env <- new.env()
source("myScript.R", local = env)

问题出在这一行:

dfs <- ls()[sapply(mget(ls(), env), is.data.frame)]

这给了我错误:Error: value for ‘env’ not found

但是当我这样做

ls(envir=env)

我得到一个包含所有对象名称的字符串。

我在做什么错了?

测试环境:

env <- new.env()
env$d <- data.frame(a=1)
env$s <- "hello"
env$p <- data.frame(z=1)
env$x <- 2

我希望返回“ d”和“ p”。

1 个答案:

答案 0 :(得分:2)

好吧,如果您在没有ls()参数的情况下调用env,它将仅列出当前环境中的名称。您的尝试似乎没有传入该参数。另一种选择是使用eapply,这是为了在环境中的对象上运行函数。例如

names(Filter(function(x) x, eapply(env, is.data.frame)))

之所以可行,是因为eapply返回了一个命名列表。我们可以从is.data.frame中过滤出TRUE值,然后获取这些名称。

mget(ls(), env)的问题在于,ls()将返回"env",然后mget()将在您的{中查找名为env的变量{1}}不存在的环境。您将需要

env

然后您需要对要设置的项目列表执行相同的操作

mget(ls(envir=env), env)