【发布时间】:2020-05-29 04:43:29
【问题描述】:
我想知道在data.frame 或命名列表上调用pmap 时,是否有办法指定哪些列应与哪些参数匹配。
在大多数情况下都非常有用且直观的默认行为是将列名与参数名匹配,如
check_row_deidentified <- function(encntr_key, clinical_event_key, note_value, ...) {
# Do stuff
tibble::tibble(encntr_key, clinical_event_key, note_value)
}
notes_1 <- tibble::tibble(
encntr_key = c(1,2,3),
clinical_event_key = c(1,2,3),
note_value = c("foo", "bar", "baz")
)
out <- notes_1 %>%
purrr::pmap_dfr(check_row_deidentified)
但我想知道是否有办法提供具有不同列名的输入,并指定 pmap 应如何处理这些。
如:
check_row_deidentified <- function(encntr_key, clinical_event_key, note_value, ...) {
# Do stuff
}
notes_1 <- tibble::tibble(
key_enc = c(1,2,3),
key_clinical = c(1,2,3),
free_text = c("foo", "bar", "baz")
)
out <- notes_1 %>%
purrr::pmap_dfr(check_row_deidentified, encntr_key = key_enc, clinical_event_key = key_clinical, note_value = note_value)
我想一个明显的选择是在我调用 pmap 之前重命名这些列,如
# Given as arg
to_rename <- rlang::exprs(
note_value = free_text,
encntr_key = key_enc,
clinical_event_key = key_clinical
)
notes_1 %>%
dplyr::rename(!!!to_rename) %>%
purrr::pmap_dfr(check_row_deidentified)
但我不确定是否存在不那么笨拙的东西
【问题讨论】:
-
我的示例实际上并没有做任何事情,@akrun,也许给出一个微不足道的回报会更好,因为
check_row_deidentified只是返回空值。 编辑: 现在不那么琐碎了 -
你也可以使用匿名函数调用而不用关心名字。e。
~ ..1或 ~ ..1 * ..2` -
@akrun 我不认为我对位置解决方案更满意,它们通常比那些依赖命名元素的解决方案对我来说更脆弱——我刚刚开始实施我的“笨拙”的解决方法,老实说,这真的不是那么笨拙。
-
请注意,
rename()也支持字符串,例如rename(!!!chr_vector)。我不会使用表达式来重命名具有已知名称映射的数据框。