В общем, как мы фильтруем по переменной списка в dplyr?
Например, фрейм данных, где одна переменная представляет собой список различных классов объектов:
aa <- tibble(ss = c(1,2),
dd = list(NA,
matrix(data = c(1,2,3,4),
nrow = 2,
ncol = 2)))
> aa
# A tibble: 2 x 2
# ss dd
# <dbl> <list>
#1 1.00 <lgl [1]>
#2 2.00 <dbl [2 × 2]>
Например, еслиЯ хочу отфильтровать по логике (хотя может быть что угодно), если бы это был не список, это было бы так просто, как:
aa %>% filter(is.logical(dd))
Но это возвращает
# A tibble: 0 x 2
# ... with 2 variables: ss <dbl>, dd <list>
Поскольку это непервый логический элемент, это первый элемент первого элемента:
> is.logical(aa$dd[1])
# [1] FALSE
> is.logical(aa$dd[[1]])
# [1] TRUE
Можно использовать purrr:map
для других операций над переменными вложенного списка, но это также не работает.
> aa %>% filter(map(.x = dd,
+ .f = is.logical))
# Error in filter_impl(.data, quo) : basic_string::resize
Что мне здесь не хватает?