为何poly函数可支持无序因子?此前版本并不支持
R中poly函数处理因子的版本行为差异
代码运行结果对比
未转换为因子的代码
以下代码在R 4.5.1和R 4.2.0版本中均无法执行:
set.seed(123456) hf <- rnorm(5) x <- sample(c("a", "b", "c"), size = 5, replace = TRUE) lm(hf ~ poly(x, 2))
执行后会抛出错误:x - xbar : non-numeric argument to binary operator
转换为因子后的代码
以下代码在R 4.5.1(2025-06-13 ucrt)版本中可正常运行,但在R 4.2.0(2022-04-22 ucrt)版本中无法运行:
set.seed(123456) hf <- rnorm(5) x <- sample(c("a", "b", "c"), size = 5, replace = TRUE) x <- as.factor(x) lm(hf ~ poly(x, 2))
疑问与观点
目前在CRAN的版本更新日志中,未找到poly或stats:::contr.poly的相关变更记录。
我认为第二种情况的行为不符合预期——poly本不应作用于普通因子。
补充:lm模型中的有序因子会自动通过正交多项式(poly)处理。
内容的提问来源于stack exchange,提问作者Christoph
相关产品推荐
相关产品推荐

