在dplyr中结合lm函数使用between时遇长度匹配错误的求助
解决dplyr添加学生化残差列时的长度匹配错误
问题原因
rstudent(mod)返回的是带名称属性的数值向量,dplyr的mutate会尝试按行名匹配数据而非按位置赋值,即便表面行名完全对应,这种匹配逻辑也可能触发长度不匹配的错误。
解决方案
核心是移除残差向量的名称属性,让mutate按位置顺序赋值,以下几种方法均可实现:
- 方法1:用
as.vector()转换为无名称向量
iris2 <- iris |> mutate(res_stud = as.vector(rstudent(mod)), res_stud_large = as.numeric(!between(res_stud, -2, 2)))
- 方法2:用
unname()直接移除名称属性
iris2 <- iris |> mutate(res_stud = unname(rstudent(mod)), res_stud_large = as.numeric(!between(res_stud, -2, 2)))
- 方法3:提前计算并存储无名称残差向量
stud_res <- unname(rstudent(mod)) iris2 <- iris |> mutate(res_stud = stud_res, res_stud_large = as.numeric(!between(res_stud, -2, 2)))
验证
执行代码后,可通过以下命令确认结果:
# 查看处理后数据的前几行 head(iris2) # 检查res_stud的结构,确认已无名称属性 str(iris2$res_stud)
内容的提问来源于stack exchange,提问作者mariann
相关产品推荐
相关产品推荐

