如何从自定义环境中获取所有dataframe对象
我想在一个脚本中获取所有数据帧。 为此,我在自定义环境中运行脚本如何从自定义环境中获取所有dataframe对象,r,R,我想在一个脚本中获取所有数据帧。 为此,我在自定义环境中运行脚本 env <- new.env() source("myScript.R", local = env) 我得到所有对象名称的字符串 我做错了什么 测试环境: env <- new.env() env$d <- data.frame(a=1) env$s <- "hello" env$p <- data.frame(z=1) env$x <- 2 env如果调用ls()而不使用env参数,它将只
env <- new.env()
source("myScript.R", local = env)
我得到所有对象名称的字符串
我做错了什么
测试环境:
env <- new.env()
env$d <- data.frame(a=1)
env$s <- "hello"
env$p <- data.frame(z=1)
env$x <- 2
env如果调用ls()
而不使用env
参数,它将只列出当前环境中的名称。您的尝试似乎没有传递该参数。另一个选项是使用eapply
,它用于在环境中的对象上运行函数。比如说
names(Filter(function(x) x, eapply(env, is.data.frame)))
这是因为eapply
返回一个命名列表。我们只需从is.data.frame
中筛选出真实值,然后获取这些名称
mget(ls(),env)
的问题是ls()
将返回“env”
,然后mget()
将在env
环境中查找名为env>的变量,该变量不存在。你需要
mget(ls(envir=env), env)
然后,您需要对正在子集的项目列表执行相同的操作
dfs <- ls(envir=env)[sapply(mget(ls(envir=env), env), is.data.frame)]
dfs
mget(ls(envir=env), env)
dfs <- ls(envir=env)[sapply(mget(ls(envir=env), env), is.data.frame)]