在 glue::glue 调用中使用函数的未命名参数...
Use a function's unnamed parameters ... in a glue::glue call
我想要一个函数将两个字符变量粘合在一起,即使在调用函数之前不知道一个(或多个)变量的名称。
f <- function(t, str1, ...) {
t %>%
mutate(name = glue::glue("{str1} {...}"))
}
s <- tidyr::tribble(
~str1, ~str2,
"first", "second"
)
s
s %>% f(str1, str2)
我想要的答案与此函数的结果相同,并且我假设第二个字段的名称已知。
f2 <- function(t, str1, ...) {
t %>%
mutate(name = glue::glue("{str1} {str2}"))
}
s <- tidyr::tribble(
~str1, ~str2,
"first", "second"
)
s
s %>% f2(str1, str2)
一般情况下,省略号 (...) 可用于传递未知数量的命名
和函数的未命名参数。看
here
举个例子。
但是像那些传递裸变量有不同的结构
在 Tidyverse 中经常使用。当
他们的数量不详。更多信息,从这里开始:
- https://dplyr.tidyverse.org/articles/programming.html
- https://tidyeval.tidyverse.org/dplyr.html(第 8.2 节)
tidyeval link 是这段代码的良好基础,讨论了引用,以及其中的几个函数。
library(tidyverse)
df <- tibble(
a = LETTERS[1:10],
b = letters[11:20]
)
mixed_bare_glue <- function(.df, .x, ...) {
var_x <- enquo(.x)
selected_vars <- enquos(...)
full_sel_vars <- c(var_x, selected_vars)
var_expr <- purrr::map(full_sel_vars, as_label) %>%
purrr::map(~ paste0("{", .x, "}")) %>%
purrr::reduce(paste)
.df %>%
mutate(name = glue::glue(var_expr))
}
mixed_bare_glue(df, a, b)
#> # A tibble: 10 x 3
#> a b name
#> <chr> <chr> <glue>
#> 1 A k A k
#> 2 B l B l
#> 3 C m C m
#> 4 D n D n
#> 5 E o E o
#> 6 F p F p
#> 7 G q G q
#> 8 H r H r
#> 9 I s I s
#> 10 J t J t
我想要一个函数将两个字符变量粘合在一起,即使在调用函数之前不知道一个(或多个)变量的名称。
f <- function(t, str1, ...) {
t %>%
mutate(name = glue::glue("{str1} {...}"))
}
s <- tidyr::tribble(
~str1, ~str2,
"first", "second"
)
s
s %>% f(str1, str2)
我想要的答案与此函数的结果相同,并且我假设第二个字段的名称已知。
f2 <- function(t, str1, ...) {
t %>%
mutate(name = glue::glue("{str1} {str2}"))
}
s <- tidyr::tribble(
~str1, ~str2,
"first", "second"
)
s
s %>% f2(str1, str2)
一般情况下,省略号 (...) 可用于传递未知数量的命名 和函数的未命名参数。看 here 举个例子。
但是像那些传递裸变量有不同的结构 在 Tidyverse 中经常使用。当 他们的数量不详。更多信息,从这里开始:
- https://dplyr.tidyverse.org/articles/programming.html
- https://tidyeval.tidyverse.org/dplyr.html(第 8.2 节)
tidyeval link 是这段代码的良好基础,讨论了引用,以及其中的几个函数。
library(tidyverse)
df <- tibble(
a = LETTERS[1:10],
b = letters[11:20]
)
mixed_bare_glue <- function(.df, .x, ...) {
var_x <- enquo(.x)
selected_vars <- enquos(...)
full_sel_vars <- c(var_x, selected_vars)
var_expr <- purrr::map(full_sel_vars, as_label) %>%
purrr::map(~ paste0("{", .x, "}")) %>%
purrr::reduce(paste)
.df %>%
mutate(name = glue::glue(var_expr))
}
mixed_bare_glue(df, a, b)
#> # A tibble: 10 x 3
#> a b name
#> <chr> <chr> <glue>
#> 1 A k A k
#> 2 B l B l
#> 3 C m C m
#> 4 D n D n
#> 5 E o E o
#> 6 F p F p
#> 7 G q G q
#> 8 H r H r
#> 9 I s I s
#> 10 J t J t