在plumber API中使用dplyr::filter完成数据筛选的问题
问题原因
你当前的代码存在两个核心错误:
- 接口注解
@param定义的参数名为my_group,但后续处理函数的参数名写为group,参数无法匹配映射 - dplyr的非标准评估规则下,
filter内的变量名会优先识别为数据框的列名,要引用外部传入的接口参数,需要明确标识变量所属环境,避免和数据框的group列重名冲突
修正后的完整代码
library(plumber) library(dplyr) #* @apiTitle Test filtering df <- data.frame(group = c("a", "b", "c"), var1 = c(3, 1, 2), var2 = c(2, 4, 8)) #* Return one value #* @param my_group My Group #* @post /my_output function(my_group) { df %>% # .data指代当前操作的数据框,.env指代外部环境的传入参数,彻底避免重名冲突 filter(.data$group == .env$my_group) %>% select(var1) }
关键说明
- 如果你的参数名和数据框列名不会重名,也可以直接写
filter(group == my_group),但加上.data和.env标识是更稳妥的写法,不会因为变量命名冲突出现意外结果 - 必须保证
@param后的参数名和函数定义的参数名完全一致,plumber会根据该注解完成参数映射 - 调用接口时传入
my_group参数值为a/b/c即可测试,会返回对应分组的var1数值
内容的提问来源于stack exchange,提问作者Nazer
相关产品推荐
相关产品推荐

