簡體   English   中英

如何從R中的列表中刪除功能?

[英]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")

清除

如果我們知道fool一次

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替代方法。

其他

請注意, whichFilter檢查除match所有排名,而Position在首次匹配后停止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM