假设代码如下,使用identical
我们可以这样获得其索引:
Position(function(fun) identical(fun, foo), l)
或者
which(sapply(l, identical, foo))
如果你了解一些函数,你就可以运行它们并根据输出进行选择。举个例子,这样做是可行的:
Position(function(f) length(f()), l)
如果您可以控制列表的创建,一个简单的方法是使用名称创建列表:
l2 <- list(foo = foo, bar = bar)
nms <- setdiff(names(l2), "foo")
删除
如果我们知道foo
只在l
中出现了一次,那么
l[-ix]
或者在l2
的情况下:
l2[nms]
或者使用@Gregor提供的替代方法:
Filter(function(x) !identical(x, foo), l)
边缘案例
如果foo
可能不在l
中,您需要首先检查该条件。如果没有匹配(或指定了nomatch
参数),则Position
和match
返回NA
,而which
返回无匹配的integer(0)
。
如果foo
可以出现多次在l
中,则使用上面的which
替代方法。
其他
请注意,which
和Filter
会检查每个位置,但match
和Position
在找到第一个匹配后就停止了。
identical
来实现这个目的:identical(l[[1]], foo)
。 - cyrilb38foo
的想法:Filter(function(x) !any(grepl("foo", body(x))),l)
。 - NelsonGon