predict
库中dummyVars
的caret
方法的documentation明确指出:
“ 预测函数产生一个数据帧。”
但是,我制作的每个示例似乎都只是一个矩阵。以下代码是一个示例:
>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))