【发布时间】:2020-10-23 16:16:28
【问题描述】:
我有一个 2x2 小标题 x,我想将它发送到函数 f。我在f 中使用rlang::dots_list() 来提取所有发送到f 的命名参数作为省略号(...)。 rlang::dots_list() 的结果被强制转换为 tibble 数据结构。
# MRE
x <- tibble::tibble(
a = base::sample(base::letters, size = 2),
b = base::sample(base::letters, size = 2)
)
f <- function(...){
rlang::dots_list(...) %>%
tibble::as_tibble()
}
f(parameter = '1', x_name = x)
# A tibble: 2 x 2
parameter x_name$a $b
<chr> <chr> <chr>
1 1 c r
2 1 v g
# Expected behaviour
f(parameter = '1', x_name = x)
# A tibble: 1 x 2
parameter x_name$data
<chr> <list>
1 1 <tibble [2 x 2]>
我通过将x 重置为x <- tidyr::nest(x, data = tidyr::everything()) 来达到预期的块。
# Trials
f <- function(...){
rlang::dots_splice(...) %>%
tibble::as_tibble()
}
f <- function(...){
as_tibble(
!!!rlang::dots_list(...)
)
}
f <- function(...){
as_tibble(...)
}
f <- function(...){
as_tibble(
!!rlang::dots_list(...)
)
}
【问题讨论】:
-
如果你只是这样使用
tibble:tibble(parameter = '1', x_name = list(x))?它返回的正是你所期望的。基本上,f将是函数tibble。你只需要将x设置到它自己的列表中。