均质化作为单独参数传递给R函数的向量,列表和值

时间:2018-08-31 16:13:16

标签: r

我正在寻找一个函数,该函数可以使由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

我最终需要一个“ hack”来查找任何此类嵌套向量,将它们转换为列表,然后取消嵌套结果列表列表:

library( purrr )
to_list <- function(...) {
  splice(...) %>% map_if( ~(length(.x) > 1), as.list ) %>% flatten()
}

我想知道是否有人知道更干净的方式来处理这三种情况,或者更好的是,已经有一个功能可以做到这一点。

1 个答案:

答案 0 :(得分:1)

不使用任何外部软件包

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