r - 如何从R中的列表中删除函数?

标签 r list nonatomic

我有两个功能的列表:

foo <- function() { print('foo') }
bar <- function() {}
l <- list(foo, bar)

如何在不知道其索引的情况下删除函数 foo?

我试过这个(获取子设置的索引):
> which(l == foo)
Error in l == foo : 
  comparison (1) is possible only for atomic and list types

有没有简单的方法可以在不循环的情况下从列表中删除非原子?

最佳答案

假设问题中的代码,使用 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")

移动

如果我们知道 fool一次然后
l[-ix]

或在 l2 的情况下:
l2[nms]

或使用@Gregor 给出的替代方案:
Filter(function(x) !identical(x, foo), l)

边缘情况

foo可能不在 l您需要先检查该条件。 Positionmatch返回 NA如果没有匹配(或指定 nomatch 参数)和 which返回 intetger(0)不匹配。

foo可以在l不止一次然后使用 which上面的替代方案。

其他

请注意 whichFilter检查每个位置,但 matchPosition第一场比赛后停止。

关于r - 如何从R中的列表中删除函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57925221/

相关文章:

r - 如果对象是从文件中新加载的,data.table 不会通过引用修改?

java - 在没有 GSON 的 Java 中将 JSONArray 转换为 List<HashMap<String,Object>>

python - 在 Python 2.7 中,为什么 grid = [ ["A"]*5]*5 不同于 grid = [] grid.append[...]

原始类型的 Objective-c 属性

r - 来回到 R 中的虚拟变量

r - 如何创建一个函数和一个循环来计算 R 中数据框中变量的增长率

r - 将列求和为特定值

python - 复制 python 列表

objective-c - 类扩展中私有(private)实例变量和属性的区别(Objective-c 2.0)

iphone - 我必须在 objective-c ios 编程中使用非原子属性吗?