我想在脚本中获取所有数据帧。 为此,我正在自定义环境中运行脚本。
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”。
答案 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)