【发布时间】:2021-03-24 15:19:30
【问题描述】:
根据join datasets using a quosure as the by argument 上的答案建议使用:quo_name 以便使用 quosures 连接表;我想使用as_name / as_label 得到相同的结果,因为quo_name 目前处于质疑生命周期阶段
这些函数处于质疑生命周期阶段。
应该使用
as_label()和as_name()而不是quo_name()。as_label()将任何 R 对象转换为字符串,但只能使用 创建一个默认名称。标签化不是一个定义明确的操作 并且不应对标签做出任何假设。另一方面, as_name() 仅适用于(可能是quosured)符号,但它是一个很好的 定义和确定性的操作。
示例
library("tidyverse")
data_a <- tibble(col_ltr = letters, col_nums = seq_along(letters))
data_b <- tibble(col_ltr = letters, col_nums = seq_along(letters) * -1)
clean_and_join <-
function(data_one,
data_two,
column_id_one,
column_id_two,
col_nums_one,
col_nums_two) {
clean_data_one <- filter(data_one, {{col_nums_one}} %% 2 == 0)
clean_data_two <- filter(data_two, {{col_nums_two}} %% 2 != 0)
by_cols <- set_names(as_label({{column_id_one}}), as_label({{column_id_two}}))
left_join(
x = clean_data_one,
y = clean_data_two,
by = by_cols
)
}
clean_and_join(data_one = data_a, data_two = data_b, column_id_one = col_ltr,
column_id_two = col_ltr, col_nums_one = col_nums,
col_nums_two = col_nums)
错误
is_quosure(x)中的错误:找不到对象'col_ltr'
期望的结果
left_join(
x = clean_data_one,
y = clean_data_two,
by = c("col_ltr" = "col_ltr") # Or by = "col_ltr" in case of identical name
)
【问题讨论】:
标签: r dplyr left-join rlang quosure