model.frame.default(object,data,xlev = xlev)中的错误:object不是矩阵

时间:2016-11-18 16:51:31

标签: r glmnet model.matrix

3天到R,无法弄清楚我做错了什么。我试图将一些带有双向交互的列发送到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

提前致谢

3 个答案:

答案 0 :(得分:1)

这是因为公式:时间〜。*。 在data.frame()中,公式没有时间列来跨越所有内容。

答案 1 :(得分:0)

我怀疑这个错误确切地说明了什么是错的。您传递给model.matrix()的对象不是矩阵。 class(data)的结果是什么?可能是data.frame。

尝试将as.matrix()添加到对model.matrix()的{​​{1}}来电。

另外两个注意事项 - 不要调用data.frames data。此处还使用可重现的示例提出问题。你会得到更好的回应。

答案 2 :(得分:0)

我认为不是这样:

dm<-matrix(dm[complete.cases(dm)], ncol=3)

你想要这个:

dm <- as.matrix(dm[complete.cases(dm), ])

不要用自己的号角(太多),但考虑使用glmnetUtils来简化管理数据帧,公式和模型矩阵的任务。