gpt4 book ai didi

r - 从 R 中的嵌套列表中提取向量

转载 作者:行者123 更新时间:2023-12-04 12:21:34 26 4
gpt4 key购买 nike

我正在尝试根据同一嵌套列表中另一个变量\元素的值从嵌套列表中提取向量。希望我的例子能解释我想要做什么。
首先,我有一个列表列表,如下所示:

## Create the inner lists
# Inner list 1
listInner1 <- list(
value = c(0.25),
index = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
left = c(),
right = c()
)

listInner1$left$index <- c(1, 2, 3, 4, 5)
listInner1$left$good <- TRUE
listInner1$right$index <- c(6, 7, 8, 8, 10)
listInner1$right$good <- TRUE

# Inner list 2
listInner2 <- list(
value = c(1.5),
index = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
left = c(),
right = c()
)

listInner2$left$index <- c(1, 2, 3)
listInner2$left$good <- TRUE
listInner2$right$index <- c(4, 5, 6, 7, 8, 9, 10)
listInner2$right$good <- TRUE

# Inner list 3
listInner3 <- list(
value = c(0.5),
index = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
left = c(),
right = c()
)

listInner3$left$index <- c(1, 2, 3, 4, 5)
listInner3$right$index <- c( 6, 7, 8, 9, 10)
listInner3$left$left$index <- c(2, 4, 6, 8, 10)
listInner3$left$right$index <- c(1, 3, 5 ,7, 9)
listInner3$left$left$good <- TRUE
listInner3$left$right$good <- TRUE


# put all inner lists into single list object
listMiddle <- list(listInner1, listInner2, listInner3)

# one more list for fun
listMaster <- list(listMiddle)
如您所见,一些 leftright嵌套列表的元素包含元素 good = TRUE有些没有。
我想要做的是,如果特定的嵌套列表包含元素 good = TRUE然后提取元素 index来自同一个嵌套列表。
例如,为上面的例子手动创建我想要的输出看起来像这样:
ans <- list(
index.1 = c(1, 2, 3, 4, 5),
index.2 = c(6, 7, 8, 8, 10),
index.3 = c(1, 2, 3),
index.4 = c(4, 5, 6, 7, 8, 9, 10),
index.5 = c(2, 4, 6, 8, 10),
index.6 = c(1, 3, 5 ,7, 9)
)
对象 ans包含所有 index包含在嵌套列表中的向量也包含 good = TRUE .
关于我如何做到这一点的任何建议?

最佳答案

这是一个选项,我们 bind使用 rrapply 将嵌套元素转换为更易于理解的格式,然后,我们获得“好”列的索引,通过在 map2 中循环从该位置索引中提取相应的“索引”元素。 (基于 TRUE 值),transpose list , keep只有大于 0 的元素 length , flatten list并设置名称(如果需要)

library(purrr)
library(rrapply)
library(stringr)
library(dplyr)
out <- rrapply(listMaster, how = 'bind')
i1 <- grep('good', names(out))
map2(out[i1-1], out[i1], `[`) %>%
transpose %>%
map( ~ keep(.x, lengths(.x) > 0)) %>%
flatten %>%
setNames(str_c('index.', seq_along(.)))
-输出
$index.1
[1] 1 2 3 4 5

$index.2
[1] 6 7 8 8 10

$index.3
[1] 1 2 3

$index.4
[1] 4 5 6 7 8 9 10

$index.5
[1] 2 4 6 8 10

$index.6
[1] 1 3 5 7 9

关于r - 从 R 中的嵌套列表中提取向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69093866/

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