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

R语言自定义函数整合stringdist报错:对象'name'未找到求助

问题解决:字符串距离计算函数的非标准求值错误修正

错误原因

你遇到的object 'name' not found错误,是因为函数没有正确处理**非标准求值(NSE)**参数。当你传入裸变量name时,函数内部的tidyverse工具(比如pivot_wider)无法在自身环境中定位这个变量,必须显式捕获并传递变量引用。

修正后的完整函数

结合rlang包的非标准求值工具,修复后的函数如下:

library(tidyr)
library(stringdist)
library(dplyr)
library(rlang)

pivot_and_string_dist <- function(input_data, measure_1, string_dist_method = "jw") {
  # 捕获输入的变量表达式并转换为变量名
  measure_var <- enquo(measure_1)
  
  # 透视数据:按city分组,id作为列名前缀,measure_1作为值
  pivoted_data <- input_data %>%
    pivot_wider(
      id_cols = city,
      names_from = id,
      values_from = !!measure_var,
      names_prefix = "id_"
    )
  
  # 计算对应列的字符串距离
  result <- pivoted_data %>%
    mutate(
      string_distance = stringdist(
        id_1,
        id_2,
        method = string_dist_method
      )
    )
  
  return(result)
}

调用验证

执行你的调用代码:

x <- pivot_and_string_dist(input_data = data, measure_1 = name, string_dist_method = "jw")
print(x)

输出结果示例:

# A tibble: 3 × 4
  city   id_1   id_2   string_distance
  <chr>  <chr>  <chr>            <dbl>
1 London jane   janey           0.0714
2 Lisbon jane   janee           0.0714
3 Paris  lauran laura           0.111 

关键修复点

  1. enquo(measure_1):捕获调用环境中传入的name变量表达式,避免函数内部找不到变量的问题。
  2. !!measure_var:在pivot_wider的values_from参数中解引用捕获的变量,让函数正确识别要透视的列。
  3. 透视后生成id_1和id_2列,直接用stringdist计算这两列的字符串距离,生成结果列string_distance。

内容的提问来源于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 01:05:04