You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在dplyr自定义函数中如何将参数求值为字符串?

解决方法

要把.field参数转换为对应的字段名字符串,你可以利用rlang包的ensym()和as_name()函数(tidyverse工具链自带该包,无需额外安装),具体实现如下:

  1. 在函数开头捕获.field对应的符号并转为字符串;
  2. 在pivot_longer的values_to参数中使用这个字符串。

修改后的完整代码:

library(dplyr)
library(tidyr)

mean_sd <- function(.data, .field){
    # 将.field转换为字段名字符串
    .field_name <- rlang::as_name(rlang::ensym(.field))
    
    .data %>% 
    summarise(
        mean = mean({{.field}}), 
        sd = sd({{.field}})
    ) %>% 
    pivot_longer(
        everything(),
        names_to = "stat",
        values_to = .field_name # 这里使用转换后的字段名字符串
        ) %>% 
    mutate(across(is.numeric, ~round(.x, 2)))
}

# 测试函数
mean_sd(mtcars, mpg)

代码说明

  • rlang::ensym(.field):把传入的.field参数(比如mpg)转换为R的符号对象;
  • rlang::as_name():把符号对象转为对应的字符串(比如将mpg符号转为"mpg");
  • summarise里的{{.field}}保留tidyeval用法,正常计算均值和标准差;
  • pivot_longer的values_to现在会使用实际传入的字段名作为列名,而非固定的.field。

运行测试代码后,输出结果的列名会是stat和mpg,完全符合预期。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:33:24