【问题标题】:Error in model.frame.default(object, data, xlev = xlev) : object is not a matrixmodel.frame.default(object, data, xlev = xlev) 中的错误:对象不是矩阵
【发布时间】:2017-04-02 14:38:59
【问题描述】:

3 天前的 R 并且无法弄清楚我做错了什么。我正在尝试将一些具有两种交互方式的列发送到 glmnet cox 模型中。我有一些名为 dtable 的 data.frame()

编辑以使代码可重现

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

提前致谢

【问题讨论】:

    标签: r glmnet model.matrix


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我认为不是这个:

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

      你想要这个:

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

      不要自吹自擂(太多),而是考虑使用glmnetUtils 来简化管理数据框、公式和模型矩阵的任务。

      【讨论】:

      • 谢谢,我会调查的。至于 as.matrix() 我没有爱。
      【解决方案3】:

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

      尝试将as.matrix() 添加到model.matrix() 调用data

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

      【讨论】:

      • 不,model.matrix() 在第二个任期内需要一个 data.frame()。注意到其他两件事。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 2020-12-20
      • 2017-02-03
      • 1970-01-01
      相关资源
      最近更新 更多