如何用最少字符在replace_na中使用选择器?附R语言示例
使用选择器调用
replace_na的最短代码实现 示例数据
df <- data.frame(x_1 = c(NA, 1, NA), x_2 = c(1, 1, NA), y = c(NA, 1, 1))
问题
允许在replace_na中使用选择器的最少代码字符数是多少?
现有可行(非最短)代码
df %>% mutate(across(matches("^x_(.*)$"), \(x) { replace_na(x, 0) }))
不可行代码及报错说明
直接在replace_na中传入选择器会触发错误,因为matches()这类选择器必须在across这类选择函数的上下文里使用:
df %>% replace_na(matches("^x_(.*)$"), 0)
报错信息:
!
matches()必须在选择函数内使用。
ℹ 详情请查看?tidyselect::faq-selection-context。
运行rlang::last_trace()查看错误发生位置。
调用自: signal_abort(cnd, .file)
最短可行代码
通过精简语法、替换更简洁的选择器,可以大幅减少字符数:
- 保留正则匹配逻辑的最短版本:
df%>%mutate(across(matches("^x_.*"),~replace_na(.x,0)))
- 用更短的
starts_with选择器(字符数更少,匹配逻辑更直接):
df%>%mutate(across(starts_with("x_"),~replace_na(.x,0)))
若对匹配范围要求宽松,还可以用matches("x_")进一步缩短代码,但需注意可能匹配到包含x_的其他变量。
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

