Проблемы с извлечением элементов из вложенного психического списка с помощью dplyr и purrr

У меня есть вложенный фрейм данных в R, к которому я применяю функцию из пакета Psy. Я добавляю получившийся список в фрейм данных. Теперь я хотел бы создать новый столбец, содержащий определенный элемент из этого списка. В принципе, я знаю, как это работает, но почему-то результирующий список NULL. Я могу убедиться, что список, из которого я извлекаю, не пустой, поэтому мне интересно, в чем проблема. Любая помощь приветствуется. Воспроизводимый пример ниже.

library(psych)
library(tidyverse)

tibble( A = c( 1, 2, 3, 4),
        B = c( 1, 2, 3 ,4),
        C = c( 2, 3, 3, 5),
        group = c( 1, 1, 1, 1))%>%
      group_by( group) %>%
      nest() %>% 
      mutate( ICC_results = data %>% map( ICC)) -> df

# Now I would like to add a variable containing a numeric element from the list, so ideally use map_dbl, but that gives an error because extracting any element from the list results in an empty list

 df  %>%
       mutate( ICC3 = ICC_results %>% map( 9)) 

# A tibble: 1 x 4
# Groups:   group [1]
  group data             ICC_results ICC3  
  <dbl> <list>           <list>      <list>
1     1 <tibble [4 x 3]> <psych>     <NULL>

# I can verify that the element I am looking to extract is not empty
df %>%
  select( ICC_results) %>%
  unlist() %>%
  str()

List of 76
 $ ICC_results.results.type1       : chr "ICC1"
 $ ICC_results.results.type2       : chr "ICC2"
 $ ICC_results.results.type3       : chr "ICC3"
 $ ICC_results.results.type4       : chr "ICC1k"
 $ ICC_results.results.type5       : chr "ICC2k"
 $ ICC_results.results.type6       : chr "ICC3k"
 $ ICC_results.results.ICC1        : num 0.857
 $ ICC_results.results.ICC2        : num 0.862
 $ ICC_results.results.ICC3        : num 0.949
 $ ICC_results.results.ICC4        : num 0.947
 $ ICC_results.results.ICC5        : num 0.949
 $ ICC_results.results.ICC6        : num 0.982
 ....

person Luise    schedule 03.09.2020    source источник
comment
какой элемент вы хотите извлечь из str(df$ICC_results)?   -  person Waldi    schedule 03.09.2020
comment
9 элемент. Я пробовал и map(9), и map("ICC_results.results.ICC3"), и все варианты, такие как извлечение, выщипывание и тому подобное ... Ничего не работает.   -  person Luise    schedule 03.09.2020
comment
@Waldi: Спасибо за подсказку, думаю, я понял это.   -  person Luise    schedule 03.09.2020
comment
Отлично, что-то вроде df$ICC_results[[1]]$results$ICC[[3]]?   -  person Waldi    schedule 03.09.2020
comment
Что-то вроде того, что предлагал @tmfmnk, но менее красивое. Так что щадю мир и воздерживаюсь от публикации :)   -  person Luise    schedule 03.09.2020


Ответы (1)


Один из вариантов может быть:

df %>%
 group_by(group) %>%
 nest() %>% 
 mutate(ICC_results = map_dbl(data, 
                              ~ pluck(ICC(.), "results") %>% 
                               filter(type == "ICC3") %>%
                               pull(ICC)))

  group data             ICC_results
  <dbl> <list>                 <dbl>
1     1 <tibble [4 × 3]>       0.949
person tmfmnk    schedule 03.09.2020