在 R 中的函数中使用 mget

Bil*_*tti 8 r

我正在尝试编写一个简单的函数r,它将搜索.GlobalEnv名称中具有特定模式的对象,然后获取该列表并将元素绑定到数据框中。

单独运行时,这按预期工作:

# create sample data

df1_pattern_to_find <- data.frame(a = 1, b = 2)
df2_pattern_to_find <- data.frame(a = 3, b = 4)

# use mget to generate a list of objects

list_of_objects <- mget(ls(pattern="_pattern_to_find"))

# bind the elements together into a data frame

do.call("rbind", list_of_objects)

                    a b
df1_pattern_to_find 1 2
df2_pattern_to_find 3 4
Run Code Online (Sandbox Code Playgroud)

但是,当我将上述内容包装在一个函数中时,它返回NULL

gather_function <- function() {
  list_of_objects <- mget(ls(pattern="_pattern_to_find"))

  df <- do.call("rbind", list_of_objects)

  df
}

gather_function()

NULL
Run Code Online (Sandbox Code Playgroud)

我试过envirmgetto内明确设置.GlobalEnv,这似乎不是问题。

我知道我在这里遗漏了一些简单的东西。

rua*_*dhw 9

正如你调用lsmget一个函数中,环境不再相同,从顶层环境调用时。

您可以对环境进行硬编码以搜索顶级,如下所示:

list_of_objects <- mget(ls(.GlobalEnv, pattern = "_pattern_to_find"), envir = .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)

您的问题是ls首先没有返回任何对象,因此单独设置envir参数mget无济于事。


避免硬编码的另一种方法.GlobalEnv是搜索所有封闭的父框架:

mget(apropos("_pattern_to_find"), inherits = TRUE)
Run Code Online (Sandbox Code Playgroud)

这将匹配模式"_pattern_to_find"并返回封闭环境中的任何对象。