如何将参数值列表应用于 R 中的函数?
How do I apply a list of argument values to a function in R?
假设您的 R 环境中有许多对象,例如:
a <- 4
b <- 3
c <- 2
aa <- 2
bb <- 6
cc <- 9
现在假设您要删除环境中以字母 'a' 或 'b' 命名的对象。这可以通过
来实现
rm(list = ls(pattern = "a"))
rm(list = ls(pattern = "b"))
但是,想象一下尝试在更大范围内解决此问题,您希望删除其值出现在列表中的所有对象,例如:
custom <- list("a", "b")
如何将此列表作为 'looped' 参数应用到 ls()
函数?
我试验过:
rm(lapply(custom, function(x) ls(pattern = x)))
但这似乎没有任何作用。
这感觉像是一个很常见的问题,所以我担心在 Whosebug 的其他地方有这个问题的答案。不幸的是我找不到它。
也许grep
可以解决您的问题:
rm(list=grep("^[ab]$", ls(), value=T))
将删除对象 a 和 b,但不会删除其他对象。
rm(list=grep("^[ab]", ls(), value=T))
将删除对象 a、aa、b 和 bb,但在环境中保留 c 和 cc。
可以很容易地用一个循环完成
test.a <- 4
test.b <- 3
test.c <- 2
test.aa <- 2
test.bb <- 6
test.cc <- 9
custom <- c("test.a", "test.b")
for (x in custom) rm(list = ls(pattern = x))
注意我添加了测试。到对象名称的开头,以避免在 运行 这段代码时扰乱人们的环境。我们不想无意中删除人们名为 a 或 b 等的实际对象。
选项 1: 这是一种矢量化方法。使用 "or" 正则表达式分隔符 (|
) 将 custom
列表粘贴在一起,并将其传递给 pattern
.
rm(list = ls(pattern = paste(custom, collapse = "|")))
选项 2: 如果您仍想使用 lapply()
,则必须在 ls()
和rm()
因为 lapply()
本身形成了一个本地环境。而且您还想将 rm()
放入 lapply()
调用中。
lapply(custom, function(x) {
e <- .GlobalEnv
rm(list = ls(pattern = x, envir = e), envir = e)
})
假设您的 R 环境中有许多对象,例如:
a <- 4
b <- 3
c <- 2
aa <- 2
bb <- 6
cc <- 9
现在假设您要删除环境中以字母 'a' 或 'b' 命名的对象。这可以通过
来实现rm(list = ls(pattern = "a"))
rm(list = ls(pattern = "b"))
但是,想象一下尝试在更大范围内解决此问题,您希望删除其值出现在列表中的所有对象,例如:
custom <- list("a", "b")
如何将此列表作为 'looped' 参数应用到 ls()
函数?
我试验过:
rm(lapply(custom, function(x) ls(pattern = x)))
但这似乎没有任何作用。
这感觉像是一个很常见的问题,所以我担心在 Whosebug 的其他地方有这个问题的答案。不幸的是我找不到它。
也许grep
可以解决您的问题:
rm(list=grep("^[ab]$", ls(), value=T))
将删除对象 a 和 b,但不会删除其他对象。
rm(list=grep("^[ab]", ls(), value=T))
将删除对象 a、aa、b 和 bb,但在环境中保留 c 和 cc。
可以很容易地用一个循环完成
test.a <- 4
test.b <- 3
test.c <- 2
test.aa <- 2
test.bb <- 6
test.cc <- 9
custom <- c("test.a", "test.b")
for (x in custom) rm(list = ls(pattern = x))
注意我添加了测试。到对象名称的开头,以避免在 运行 这段代码时扰乱人们的环境。我们不想无意中删除人们名为 a 或 b 等的实际对象。
选项 1: 这是一种矢量化方法。使用 "or" 正则表达式分隔符 (|
) 将 custom
列表粘贴在一起,并将其传递给 pattern
.
rm(list = ls(pattern = paste(custom, collapse = "|")))
选项 2: 如果您仍想使用 lapply()
,则必须在 ls()
和rm()
因为 lapply()
本身形成了一个本地环境。而且您还想将 rm()
放入 lapply()
调用中。
lapply(custom, function(x) {
e <- .GlobalEnv
rm(list = ls(pattern = x, envir = e), envir = e)
})