gpt4 book ai didi

r - 如何在函数内部将名称中具有模式的所有变量放入列表中

转载 作者:行者123 更新时间:2023-12-04 10:31:31 26 4
gpt4 key购买 nike

我有一个像下面这样的函数,它生成具有相似名称的各种变量。在此函数中,我想将所有变量放入一个列表中。我知道这个例子看起来效率不高,因为我可以从一开始就使用列表,但是在我的函数中,我有必要这样做。

test_function <- function(x) {
myenv <- new.env()
myenv$hello1 = "hello1string"
myenv$hello2 = "hello2string"
myenv$cello2 = "hello2string"
mylist <- lapply(ls(name = myenv, pattern = "hello"), get)
print(class(mylist))
}

如何将所有以“hello”开头的变量放入列表而不给出错误:FUN(X[[i]], ...) 中的错误:运行时找不到对象“hello1” test_function() .甚至在将变量放入共享环境时也会发生这种情况。

我要最后 mylist属于类列表,而不是字符。

谢谢!

最佳答案

您可以创建一个环境,然后在其中创建变量。然后使用 ls()具有环境名称和正确模式的函数,您可以看到环境中与给定模式匹配的变量列表。

test_function <- function(x) {
myenv <- new.env()
myenv$hello1 = "hello1"
myenv$hello2 = "hello2"
myenv$cello2 = "hello2"
mylist <- ls(name = myenv, pattern = "hello")
print(mylist)
}
test_function(1)
# [1] "hello1" "hello2"

您可以使用 mget提取环境中变量列表的值。
test_function <- function(x, y, z, pattern) {
myenv <- new.env()
ls_vars <- list( hello1 = x,
hello2 = y,
cello2 = z)
list2env( ls_vars, myenv ) # add list of variables to myenv environment
newvar <- "hello3"
assign(newvar, value = "dfsfsf", envir = myenv) # assign new variable
mylist <- ls(name = myenv, pattern = pattern)
return(mget(mylist, envir = myenv))
}
test_function(x = "hello1", y = "hello2", z = "sdfsd", pattern = "hello")
# $hello1
# [1] "hello1"
#
# $hello2
# [1] "hello2"
#
# $hello3
# [1] "dfsfsf"

test_function(x = "hello1", y = "hello2", z = "sdfsd", pattern = "cello")
# $cello2
# [1] "sdfsd"

关于r - 如何在函数内部将名称中具有模式的所有变量放入列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48434365/

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