gpt4 book ai didi

R 带有子列表的列表 : Extract all elements that match a rule into array

转载 作者:行者123 更新时间:2023-12-03 22:55:58 24 4
gpt4 key购买 nike

我有一个 R 对象列表,它们也是各种类型的列表。我想要所有类别为“内部”的对象的“成本”值。实现这一目标的好方法是什么?

如果我有一个数据框,我会做类似的事情

my_dataframe$cost[my_dataframe$category == "internal"]

列表的类似习语是什么?
mylist<-list(list(category="internal",cost=2),
list(category="bar",cost=3),list(category="internal",cost=4),
list(category='foo',age=56))

在这里我想得到 c(2,4)。像这样子集不起作用:
mylist[mylist$category == "internal"]

我可以通过以下方式完成其中的一部分:
temp<-sapply(mylist,FUN = function(x) x$category=="internal")
mylist[temp]
[[1]]
[[1]]$category
[1] "internal"

[[1]]$cost
[1] 2


[[2]]
[[2]]$category
[1] "internal"

[[2]]$cost
[1] 4

但是我如何获得成本以便我可以(比如)总结它们等等?我试过这个,但没有多大帮助:
unlist(mylist[temp])
category cost category cost
"internal" "2" "internal" "4"

是否有一个整洁、紧凑的成语来做我想做的事?

最佳答案

你要找的成语是

sapply(mylist, "[[", "cost")

它返回提取的向量的列表,如果它存在,如果不存在,则返回 NULL。
[[1]]
[1] 2

[[2]]
[1] 3

[[3]]
[1] 4

[[4]]
NULL

如果您只想要内部类别的总和,则可以假设您想要一个向量,执行以下操作。
sum(sapply(mylist[temp], "[[", "cost"))

如果你想要一个相同结果的列表,你可以做
sapply(mylist,function(x) x[x$category == "internal"]$cost)

关于 R 的美丽但具有挑战性的事情之一是有很多方法可以表达相同的语言。

您可能会从其他答案中注意到您可以互换 sapplylapply由于列表只是异构向量,因此以下内容也将返回 6 .
do.call("sum",lapply(mylist, function(x) x[x[["category"]] == "internal"]$cost))

关于R 带有子列表的列表 : Extract all elements that match a rule into array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38948931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com