首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中的函数中使用mget

在R中的函数中使用mget
EN

Stack Overflow用户
提问于 2018-03-09 14:50:13
回答 1查看 5.1K关注 0票数 9

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

当单独运行时,此操作如预期的那样工作:

代码语言:javascript
复制
# 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

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

代码语言:javascript
复制
gather_function <- function() {
  list_of_objects <- mget(ls(pattern="_pattern_to_find"))

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

  df
}

gather_function()

NULL

我已经尝试在mget中显式地将mget设置为.GlobalEnv,这似乎不是问题所在。

我知道我错过了一些简单的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-09 15:11:04

在函数中调用lsmget时,环境不再与从顶层环境调用时相同。

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

代码语言:javascript
复制
list_of_objects <- mget(ls(.GlobalEnv, pattern = "_pattern_to_find"), envir = .GlobalEnv)

您的问题是,ls一开始没有返回任何对象,因此仅在mget中设置envir参数不会有帮助。

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

代码语言:javascript
复制
mget(apropos("_pattern_to_find"), inherits = TRUE)

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49196301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档