R语言如何将字符串格式列名传入dplyr的across函数进行处理
解决方案
你遇到的报错本质原因是R会把cols_to_modify列的字符串整体识别为单个列名,而非多个列的组合规则,因此提示找不到名为c(drat, wt)的列。你可以通过解析字符串为R表达式的方式实现需求,代码如下:
library(tidyverse) # 正确实现代码 mtcars_2 %>% mutate(across( .cols = eval(rlang::parse_expr(first(cols_to_modify))), .fns = round ))
运行后输出结果符合预期:
drat wt qsec cols_to_modify Mazda RX4 4 3 16.46 c(drat, wt)
代码逻辑说明
first(cols_to_modify):提取cols_to_modify列的首个值,如果你的数据中所有行共用同一组待处理列,该写法通用;如果每行需要处理的列不同,可以搭配rowwise()调整逻辑rlang::parse_expr():将字符串格式的R代码转换为可执行的表达式对象,避免被识别为普通字符串eval():执行解析后的表达式,得到across可以识别的列选择规则
内容的提问来源于stack exchange,提问作者Kene David Nwosu
相关产品推荐
相关产品推荐

