就像标题说的,我想更新一个函数列表,而不需要创建另一个对象。我有一个这样的代码:
add.filter <- function(filters.list, ..., after) {
filters.list <- append(filters.list, ..., after={{after}})
filters.list <<- filters.list
}
filters.list <- list(a = 1, b = 2, c = 3)
add.filter(filters.list, "d", after = 2)
filters.list
$a
[1] 1
$b
[1] 2
[[3]]
[1] "d"
$c
[1] 3
这工作正常,但我希望函数add.filter能够与函数列表一起工作。
例如:
filters.list <- list(function(x) replace(x, x == 3 , 300),
function(x) replace(x, x == "l" , 400)
)
如果参数是:我如何让函数add.filters()工作?
add.filter(filters.list, function(x) replace(x, x == 300 , 5000), after = 1)
我希望add.filters()的输出如下所示:
filters.list
[[1]]
function(x) replace(x, x == 3 , 300)
[[2]]
function(x) replace(x, x == 300 , 5000)
[[3]]
function(x) replace(x, x == "l" , 400)
总而言之,我想创建一个add.filters函数,它可以向现有的函数列表添加函数,而不必创建新的列表。我想用添加的新函数(filter)更新原始列表。我想让这样的东西工作:
add.filter <- function(filters.list, ..., after) {
filters.list <- append(filters.list, ..., after={{after}})
filters.list <<- filters.list
}
g<-list(function(x) replace(x, x == 3 , 300),
function(x) replace(x, x == "l" , 400)
)
add.filter(g, function(x) replace(x, x == 300 , 5000), after = 1)
g
[[1]]
function(x) replace(x, x == 3 , 300)
[[2]]
function(x) replace(x, x == "l" , 400)`
this don't work well, so the question is how do I make the function add.filter to go for this type of list.
Thanks a lot
1条答案
按热度按时间qv7cva1a1#
我不确定你想要实现的是不重新分配
add.filter()
的输出。在这种情况下,我们可以用deparse(substitute())
捕获你的输入对象的名称,并在assign()
中使用它。此外,你的函数应该有一个env
参数,它默认为parent.frame()
,但你也可以覆盖它。小心这个函数将覆盖它的输入对象。创建于2023年3月13日,使用reprex v2.0.2