dummyVars 真的预测 return 数据框吗?

Does dummyVars predict really return a data frame?

caret 库中 dummyVarspredict 方法有 documentation 明确说明:

"The predict function produces a data frame."

但是,我生成的每个示例似乎都只是一个矩阵。下面的代码就是一个例子:

>input<-data.frame(id=c(1, 2, 3), direction=c('up', 'down', 'down'))
>dmy<-dummyVars(" ~ .",input)
>output<-predict(dmy, newdata=input)
>output
  id direction.down direction.up
1  1              0            1
2  2              1            0
3  3              1            0
>class(output)
[1] "matrix"
>is.data.frame(output)
[1] FALSE
>is.matrix(output)
[1] TRUE

我所看到的一切都表明文档是错误的,predict 函数实际上返回的是矩阵而不是数据框。怎么回事?

我认为你是对的,文档是错误的。如果查看源代码,返回的对象是在函数体的第 19 行创建的,如下所示:

x <- model.matrix(Terms, m)

这是一个矩阵对象。创建 x 后函数体中还有更多代码,但它所做的只是更改列名并删除 (Intercept) 列。在返回之前,它绝不会转换为数据框。

是的,尝试以其他方式在数据框中进行粗略复制,仅此有效:

output<-data.frame(predict(dmy, newdata = input))
print(class(output))