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
关键修复点
enquo(measure_1):捕获调用环境中传入的name变量表达式,避免函数内部找不到变量的问题。!!measure_var:在pivot_wider的values_from参数中解引用捕获的变量,让函数正确识别要透视的列。- 透视后生成
id_1和id_2列,直接用stringdist计算这两列的字符串距离,生成结果列string_distance。
内容的提问来源于stack exchange,提问作者fe108
相关产品推荐
相关产品推荐

