如何从命名列表中删除元素而不分配?

kjo*_*kjo 1 r

假设我有一个名为的列表

somelist <- list(a = 1, b = 5, c = 3)
Run Code Online (Sandbox Code Playgroud)

我知道我可以somelist$b通过分配NULL它来放弃:

somelist$b <- NULL
Run Code Online (Sandbox Code Playgroud)

我认为这对于交互式工作来说很好,但对于程序化工作来说并不是很好,因为它会强制创建其他多余的变量.


例如,假设foo(42)计算结果类似于somelist上面的列表,并且我想传递将b元素从foo(42)其他函数中删除的列表bar.在这种情况下,应用上面显示的方法需要以下内容:

superfluous.variable <- foo(42)
superfluous.variable$b <- NULL
bar(superfluous.variable)
rm(superfluous.variable)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来传递bar修改后的结果,foo这不需要这些多余的任务.上面的四行将崩溃为一行:

bar(drop.item.from.list(foo(42), item.to.drop = "b"))
Run Code Online (Sandbox Code Playgroud)

R是否已经具有上述假设drop.item.from.list功能?

Ric*_*ven 8

你可以随时随地进行删除 replace()

replace(somelist, "b", NULL)
# $a
# [1] 1
#
# $c
# [1] 3
Run Code Online (Sandbox Code Playgroud)

它适用于多个变量......

replace(somelist, c("a", "b"), NULL)
# $c
# [1] 3
Run Code Online (Sandbox Code Playgroud)

所以只需将其包装好,bar()原始列表保持不变.

注意:我不确定你在做什么,foo(42)但你声明结果列表采用了类似的结构,所以这应该没问题.