gpt4 book ai didi

r - 在 R 的函数中使用 mget

转载 作者:行者123 更新时间:2023-12-04 12:07:46 30 4
gpt4 key购买 nike

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

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

# 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 :
gather_function <- function() {
list_of_objects <- mget(ls(pattern="_pattern_to_find"))

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

df
}

gather_function()

NULL

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

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

最佳答案

当你调用 lsmget在函数内,环境不再与从顶级环境调用时相同。

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

list_of_objects <- mget(ls(.GlobalEnv, pattern = "_pattern_to_find"), envir = .GlobalEnv)

您的问题是 ls首先没有返回任何对象,所以设置 envir mget 内的参数单独没有帮助。

避免硬编码的替代方法 .GlobalEnv是搜索所有封闭的父框架:
mget(apropos("_pattern_to_find"), inherits = TRUE)

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

关于r - 在 R 的函数中使用 mget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49196301/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com