R 如何在函数内部将名称中带有模式的所有变量放入列表中
我有一个类似下面的函数,它生成具有相似名称的各种变量。在这个函数中,我想把所有变量都放到一个列表中。我知道这个例子似乎不是很有效,因为我可以从一开始就使用列表,但在我的函数中,我必须这样做R 如何在函数内部将名称中带有模式的所有变量放入列表中,r,R,我有一个类似下面的函数,它生成具有相似名称的各种变量。在这个函数中,我想把所有变量都放到一个列表中。我知道这个例子似乎不是很有效,因为我可以从一开始就使用列表,但在我的函数中,我必须这样做 test_function <- function(x) { myenv <- new.env() myenv$hello1 = "hello1string" myenv$hello2 = "hello2string" myenv$cello2 = "hello2s
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))
}
test_function您可以创建一个环境,然后在其中创建变量。然后使用带有环境名称和正确模式的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"
有没有一种方法可以在不手动更改所有变量赋值的情况下将该函数生成的所有变量放入环境中?手动更改变量名是不可能的,因为我使用assign(paste(xxx),yyy)
生成了许多变量,这些变量会根据输入更改名称。对不起,我的意思是,我无法单独查看并将所有变量分配给一个环境。我想知道是否有可能在函数的开头添加一些内容,以某种方式将内容强制到指定的环境(甚至全局环境),以便更容易地将变量放入列表中。在您最初的回答中,mylist
是类字符,但我需要它是类列表。如果这不合理,请随时提问。即使我使用您的初始响应和分配环境,在使用Lappy将变量放入列表时仍然会出现错误test\u函数我想我的最后一句话print(mylist)
可能不清楚我想要输出为类列表。很抱歉。是否要使用环境中的值的变量?
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"