dummyVars 真的预测 return 数据框吗?
Does dummyVars predict really return a data frame?
caret
库中 dummyVars
的 predict
方法有 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))
caret
库中 dummyVars
的 predict
方法有 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))