model.frame.default(object, data, xlev = xlev) 中的错误:对象不是矩阵
Error in model.frame.default(object, data, xlev = xlev) : object is not a matrix
R 3 天大,无法弄清楚我做错了什么。我正在尝试将一些具有两种交互方式的列发送到 glmnet cox 模型中。我有一些 data.frame() 叫做 dtable
编辑以使代码可重现
xs<-c("Col1", "Col2", "Col3")
v<-c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, NA, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, NA, 25, 26, 27, 28, 29, 30)
df<-data.frame(matrix(v,ncol=3))
dm<-as.matrix(df)
dm<-matrix(dm[complete.cases(dm)], ncol=3)
colnames(dm)<-xs
dfdata<-data.frame(dm)
f<-as.formula(time~.*.)
xmatrix<-model.matrix(f, dfdata)[,-1]
当我运行这个时,我得到了错误
Error in model.frame.default(object, data, xlev = xlev) :
object is not a matrix
提前致谢
我怀疑错误是在准确说明问题所在。您传递给 model.matrix()
的对象不是矩阵。 class(data)
的结果是什么?可能是 data.frame。
尝试将 as.matrix()
添加到对 data
的 model.matrix()
调用中。
另外两条注意事项 - 不要给您的 data.frame 打电话 data
。还使用可重现的示例在此处提问。你会得到更好的回应。
我认为不是这样:
dm<-matrix(dm[complete.cases(dm)], ncol=3)
你想要这个:
dm <- as.matrix(dm[complete.cases(dm), ])
不是自吹自擂(太多),而是考虑使用 glmnetUtils 来简化管理数据框、公式和模型矩阵的任务。
是因为公式:时间~.*。
在 data.frame() 中,公式没有时间列来交叉所有内容。
R 3 天大,无法弄清楚我做错了什么。我正在尝试将一些具有两种交互方式的列发送到 glmnet cox 模型中。我有一些 data.frame() 叫做 dtable
编辑以使代码可重现
xs<-c("Col1", "Col2", "Col3")
v<-c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, NA, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, NA, 25, 26, 27, 28, 29, 30)
df<-data.frame(matrix(v,ncol=3))
dm<-as.matrix(df)
dm<-matrix(dm[complete.cases(dm)], ncol=3)
colnames(dm)<-xs
dfdata<-data.frame(dm)
f<-as.formula(time~.*.)
xmatrix<-model.matrix(f, dfdata)[,-1]
当我运行这个时,我得到了错误
Error in model.frame.default(object, data, xlev = xlev) :
object is not a matrix
提前致谢
我怀疑错误是在准确说明问题所在。您传递给 model.matrix()
的对象不是矩阵。 class(data)
的结果是什么?可能是 data.frame。
尝试将 as.matrix()
添加到对 data
的 model.matrix()
调用中。
另外两条注意事项 - 不要给您的 data.frame 打电话 data
。还使用可重现的示例在此处提问。你会得到更好的回应。
我认为不是这样:
dm<-matrix(dm[complete.cases(dm)], ncol=3)
你想要这个:
dm <- as.matrix(dm[complete.cases(dm), ])
不是自吹自擂(太多),而是考虑使用 glmnetUtils 来简化管理数据框、公式和模型矩阵的任务。
是因为公式:时间~.*。 在 data.frame() 中,公式没有时间列来交叉所有内容。