model.matrix处理多行DataFrame报错,单行运行正常求助
解决model.matrix报错:variable lengths differ (found for 'age')
嘿,这个问题我遇见过!咱们一步步来排查:
问题根源
你看到的报错variable lengths differ,本质是你的DataFrame里**age和sex的行数不一样了**。虽然你一开始创建的是两行的df,但大概率是之后不小心修改了其中一列的长度(比如误操作把age改成了单个值,或者删了一行但只改了一列)。
先验证问题
先跑这两行代码确认一下:
str(df) # 查看DataFrame的结构 sapply(df, length) # 直接输出每列的长度
如果输出里age的长度是1,sex是2,那就是问题所在了。
修复方法
把长度不一致的列修正回相同长度就行。比如如果age被改成了c(50),重新赋值:
df$age <- c(50, 60)
或者干脆重新创建正确的DataFrame:
df <- data.frame(age=c(50, 60), sex=factor(c('M', 'F')))
测试修复效果
现在再运行你的model.matrix代码:
model.matrix(1 ~ age + sex, df)
正常情况下会输出这样的结果:
(Intercept) age sexF 1 1 50 0 2 1 60 1 attr(,"assign") [1] 0 1 2 attr(,"contrasts") attr(,"contrasts")$sex [1] "contr.treatment"
为什么单行运行没问题?
当你取df[1, ]的时候,每列都被截取成了长度1,自然不存在长度不一致的问题,所以能正常执行。
内容的提问来源于stack exchange,提问作者Stuart Lacy
相关产品推荐
相关产品推荐

