gpt4 book ai didi

r - 基于属性值的访问列表元素

转载 作者:行者123 更新时间:2023-12-03 15:33:51 24 4
gpt4 key购买 nike

假设我有一个列表,其元素具有属性,如下所示:

my_list <- list()

my_list[[1]] <- 1:10
my_list[[2]] <- 11:20
my_list[[3]] <- 21:30

attr(my_list[[1]], "att1") <- "a"
attr(my_list[[2]], "att1") <- "b"
attr(my_list[[3]], "att1") <- "c"

attr(my_list[[1]], "att2") <- "1"
attr(my_list[[2]], "att2") <- "2"
attr(my_list[[3]], "att2") <- "3"

现在,假装此列表有数百个元素,而我不知道该列表中的哪个元素具有我想要的属性。但是我知道我想要元素,例如att1 ==“b”和att2 ==“2”(但是我不知道它恰好对应于列表元素2)。

R中是否有一种方法可以查找列表中的哪些元素具有特定的属性组合?

最佳答案

您可以使用Filter过滤列表:

Filter(function(x) attr(x, "att1") == "b" & attr(x, "att2") == "2", my_list)

如果您希望元素是唯一的并且想要选择它,请在最后添加 [[1]]

就个人而言,我会将数据放入表中:
library(data.table)
myDT = data.table(
att1 = sapply(my_list, attr, "att1"),
att2 = sapply(my_list, attr, "att2"),
data = my_list
)

# att1 att2 data
# 1: a 1 1,2,3,4,5,6,
# 2: b 2 11,12,13,14,15,16,
# 3: c 3 21,22,23,24,25,26,

然后,您可以验证att1 + att2唯一地固定元素
nrow(myDT) == uniqueN(myDT, by=c("att1", "att2"))
# [1] TRUE

并编写一个用于子集的辅助函数
setkey(myDT, att1, att2)
get_element = function(a1, a2) myDT[.(a1, a2), data[[1]]]

get_element("b", "2")
# [1] 11 12 13 14 15 16 17 18 19 20
# attr(,"att1")
# [1] "b"
# attr(,"att2")
# [1] "2"

您可能还需要查看purrr和broom软件包,它们为具有列表列的表提供了不同的“tidyverse”语法。

关于r - 基于属性值的访问列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50262218/

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