r - 如何从R中的列表中删除函数?
问题描述
我有两个功能的列表:
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")
移动
如果我们知道那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
停止。
推荐阅读
- javascript - 如何获取其值等于 True 的数组的键
- javascript - 如何在 JS 中编辑 JavaScript 变量的 CSS?
- excel - 即使函数返回 False,If 语句也计算为 True
- java - 如何添加?它扩展了 List 中的某个类
- sql - 您好,目前正在学习,我需要一些帮助。我需要编写一个查询,该查询将返回一个带有选择列的表
- html - 使用 React 应用程序的 CSS 格式非常奇怪,主要重叠。我该如何解决?
- java - 如何识别文本文件的行分隔符?写入该文本文件时可以复制它吗?
- dart - 构建颤振工具...因为颤振工具依赖于 sockjs_client 0.3.5 不匹配任何版本,版本
- python - 如何检查字典中是否存在某个日期,如果没有,则返回最接近的可用日期?
- c# - 我从哪里开始使用 amazon 和 netflix 的第一个 c# 项目?