Я ищу функцию, которая гомогенизирует векторы, составленные из c()
, списков и значений, передаваемых в качестве отдельных аргументов. Рассмотрим следующие три вызова функций:
to_list( c(1, 2, 3) ) # Case 1
to_list( list(1, 2, 3) ) # Case 2
to_list( 1, 2, 3 ) # Case 3
Желаемым выводом для всех трех является список:
# List of 3
# $ : num 1
# $ : num 2
# $ : num 3
purrr::splice()
корректно работает в случаях 2 и 3. Однако для случая 1 он вложит вектор в список:
# List of 1
# $ : num [1:3] 1 2 3
В конечном итоге мне понадобился «хак», который ищет любые такие вложенные векторы, преобразует их в списки и затем выводит результирующий список списков:
library( purrr )
to_list <- function(...) {
splice(...) %>% map_if( ~(length(.x) > 1), as.list ) %>% flatten()
}
Мне было интересно, знает ли кто-нибудь более чистый способ обработки всех трех случаев или, что еще лучше, функцию, которая уже делает это.