R语言自定义函数内按列名选数据报错:object 'cyl' not found
问题原因与解决办法
你遇到的Error: object 'cyl' not found,是因为tidyverse系列函数(比如select、group_by)采用非标准求值逻辑,当你在自定义函数里直接传递裸变量名(比如cyl)时,函数内部会去全局环境找这个对象,而不是从传入的data数据集里识别变量,所以才会报错。
修正后的代码
只需要用{{ }}(双大括号)把参数grouping_var包裹起来,就能让tidyverse函数正确识别这是数据集中的变量:
table_fun = function(data, grouping_var){ data %>% select({{grouping_var}}) %>% group_by({{grouping_var}}) %>% summarise(count = n()) } # 测试运行 table_fun(mtcars, cyl)
补充说明
{{ }}是tidyverse提供的准引用语法,作用是告诉函数:把传入的参数当作数据框内的变量名来解析,而非全局环境里的对象,完美解决自定义函数中使用tidyverse非标准求值函数的适配问题。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

