我正在寻找一个函数,该函数可以使由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()
}
我想知道是否有人知道更干净的方式来处理这三种情况,或者更好的是,已经有一个功能可以做到这一点。
答案 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