[英]How to remove function from list in 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
,則需要首先檢查該條件。 如果不存在匹配(或為其中一個指定nomatch
參數), which
返回intetger(0)
表示不匹配,則Position
match
返回NA
。
如果foo
可以在l
不止一次,則使用上面的which
替代方法。
請注意, which
和Filter
檢查除match
所有排名,而Position
在首次匹配后停止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.