2017-07-26 60 views
1

我很抱歉一遍又一遍地重复这个问题,但似乎我对预测更广泛的范围了解不足。看起来,如果数据的nrow与预测值匹配得不错,就没有错误。但是,如果您想预测不同范围我们将会收到错误消息。预测()在更广的范围

使用相同的数据,从dplyrdo-requires-named-function

它工作得很好。但是如果你想改变配件的范围,我会收到一个错误!

library(dplyr) 
iris %>% 
    group_by(Species) %>% 
    do({ 
    mod <- lm(Sepal.Length ~ Sepal.Width, data = .) 
    pred <- predict(mod, newdata = data.frame(Sepal.Width=seq(1,10,length.out=51))) 
    data.frame(., pred) 
    }) 

在data.frame误差(,预解码值。): 参数意味着不同的行数:50,51

据我所知,新的范围不匹配与以前的数据.。 OTH,我需要预测更大范围的Sepal.Width值。这可能吗 ?

回答

2

当您使用data.frame(.,pred)时,您尝试将现有数据框与50行和新预测与51行绑定在一起。如果更换此线由data.frame(pred)一切正常:

# A tibble: 153 x 2 
# Groups: Species [3] 
    Species  pred 
    <fctr> <dbl> 
1 setosa 3.329491 
2 setosa 3.453779 
3 setosa 3.578067 
... 
+0

这很酷,但如果你想绘制的东西使用相同'.' data.frame它有'data.frame是有用的(,预计值) '。在其他情况下,我想我们需要从此建立另一个数据。例如,如果我想绘制'Sepal.Length_predicted' vs'pred',我需要构建新的'data.frame'。我对么? – Alexander

+0

,这个'Sepal.Lenght_predicted'来自我们从'lm'得到的拟合系数。 – Alexander

+0

这是正确的.... –