假设问题中的代码,使用identical
我们可以得到它的索引,如下所示:
Position(function(fun) identical(fun, foo), l)
## [1] 1
或者
which(sapply(l, identical, foo))
## [1] 1
如果您对函数有所了解,则可以运行它们并根据输出进行选择。例如,这有效:
Position(function(f) length(f()), l)
## [1] 1
如果您可以控制列表的创建,一种简单的方法是使用名称创建列表:
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
您将需要先检查该条件。如果不匹配则返回(或指定任一Position
参数match
),如果不匹配则返回。 NA
nomatch
which
intetger(0)
如果foo
可以l
不止一次,则使用which
上面的替代方法。
其他
请注意which
并Filter
检查每个位置,但在第一场比赛match
后Position
停止。