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

R语言:自定义函数中使用pivot_wider报错的解决方法

解决pivot_wider自定义函数中的变量引用错误

问题背景

在R中处理不同结构的输入表时,编写了包含pivot_wider的自定义函数,调用时触发错误:

Error in paste0({ : cannot coerce type 'closure' to vector of type 'character'

问题出在{{}}等变量引用语法的使用上,需要生成指定格式的透视结果。

测试数据

data <- data.frame(
  id = c(1, 2, 1, 2, 1, 2),
  name = c("jane", "jane", "lauran", "lauran", "james", "james"),
  month = c("april", "april", "may", "june", "june","june")
)

错误的函数与调用代码

自定义函数(存在问题):

pivot_data <- function(input_data,
                       measure_1){

output <- input_data %>%
          arrange(name, id) %>%
          pivot_wider(names_from = id,
                      names_prefix =  paste0({{measure_1}}, "_"),  # 此处出错
                      values_from = {{measure_1}})
}

调用代码:

required_output <- pivot_data(input_data = data,
                              measure_1 = month)

期望输出

namemonth_1month_2
jamesjunejune
janeaprilapril
lauranmayjune

问题原因

paste0({{measure_1}}, "_")里的{{measure_1}}传递的是符号对象(而非字符型字段名),paste0无法直接处理符号类型,因此触发类型转换错误。而values_from = {{measure_1}}本身是正确的,因为pivot_wider支持符号输入。

修正后的函数

需要把符号转换为字符串,这里用rlang::as_name()配合ensym()捕获字段名:

library(dplyr)
library(tidyr)

pivot_data <- function(input_data, measure_1){
  # 获取字段名的字符形式
  measure_name <- rlang::as_name(rlang::ensym(measure_1))
  
  output <- input_data %>%
    arrange(name, id) %>%
    pivot_wider(
      names_from = id,
      names_prefix = paste0(measure_name, "_"),
      values_from = {{measure_1}}
    )
  
  return(output)
}

或者更简洁的写法,直接在paste0中转换:

pivot_data <- function(input_data, measure_1){
  output <- input_data %>%
    arrange(name, id) %>%
    pivot_wider(
      names_from = id,
      names_prefix = paste0(rlang::as_name({{measure_1}}), "_"),
      values_from = {{measure_1}}
    )
  
  return(output)
}

验证结果

调用修正后的函数:

required_output <- pivot_data(input_data = data, measure_1 = month)
print(required_output)

输出结果:

# A tibble: 3 × 3
  name   month_1 month_2
  <chr>  <chr>   <chr>  
1 james  june    june   
2 jane   april   april  
3 lauran may     june   

完全匹配期望格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:22:33