R语言自定义函数报错‘Unknown or uninitialised column: `x`’的原因排查咨询
R语言自定义函数报错‘Unknown or uninitialised column:
x’的原因排查咨询 你遇到的这个问题其实是R里$运算符的特性导致的,我来给你拆解一下原因和解决办法:
问题根源
当你用data$x_character的时候,$运算符只会字面量匹配列名——它会直接去数据框里找名为x_character的列,而不是把变量x_character里存储的字符串(比如你传入的level转成的"level")当作列名来查找。你的数据框里根本没有叫x_character的列,所以自然会报“未知或未初始化的列”的错误。
解决办法
这里有两种常用的修正方式,你可以根据习惯选择:
方法1:用基础R的[[运算符(兼容所有场景)
[[运算符支持用字符串变量来引用列名,正好适配你已经把参数转成字符串的逻辑,修改后的函数如下:
unique_without_na <- function(data, x) { # 把输入参数转成字符串列名 x_character <- deparse(substitute(x)) print(x_character) # 调试用的检查 # 用[[来引用列,替代原来的$ unique_x <- data[[x_character]][!is.na(data[[x_character]])] %>% unique() unique_x }
方法2:用dplyr的非标准求值(tidyverse风格)
既然你已经在使用dplyr,不如直接用{{}}(curly-curly语法)来处理非标准参数,这样连手动转字符串的步骤都省了,代码更简洁:
unique_without_na <- function(data, x) { data %>% filter(!is.na({{x}})) %>% # 过滤掉NA值 pull({{x}}) %>% # 提取目标列 unique() # 去重 }
验证效果
现在调用这两个版本的函数,都能正常返回结果:
unique_without_na(my_data, level)会返回"1st" "2nd" "3rd"unique_without_na(my_data, score)会返回对应的非NA唯一分数值
备注:内容来源于stack exchange,提问作者J.Sabree
相关产品推荐
相关产品推荐

