Гомогенизировать векторы, списки и значения, передаваемые как отдельные аргументы в функцию R - PullRequest
0 голосов
/ 31 августа 2018

Я ищу функцию, которая гомогенизирует векторы, составленные из 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()
}

Мне было интересно, знает ли кто-нибудь более чистый способ обработки всех трех случаев или, что еще лучше, функцию, которая уже делает это.

1 Ответ

0 голосов
/ 31 августа 2018

Без использования каких-либо внешних пакетов

to_list <- function(...) as.list(unlist(list(...)))
str(to_list(1, 2, 3))
str(to_list(c(1, 2, 3)))
str(to_list(list(1, 2, 3)))

Еще один вариант с purrr

to_list <- function(...) list(...) %>%
                            flatten 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...