filter()
をpredict.gam()の の結果に、次にggplot()
の予測のサブセットに使用できない理由を突き止めています。私は 予測ステップが実際に問題の一部であるとは確信していませんが、それはエラーを引き起こすのにかかるのですか です。ただfilter() %>% ggplot()
と のdataframeがうまくいきます。filter()からggplot()にpredict()出力をパイプすることができません。
library(dplyr)
library(ggplot2)
library(mgcv)
gam1 <- gam(Petal.Length~s(Petal.Width) + Species, data=iris)
nd <- expand.grid(Petal.Width = seq(0,5,0.05),
Species = levels(iris$Species),
stringsAsFactors = FALSE)
predicted <- predict(gam1,newdata=nd)
predicted <- cbind(predicted,nd)
filter(tbl_df(predicted), Species == "setosa") %>%
ggplot(aes(x=Petal.Width, y = predicted)) +
geom_point()
## Error: length(rows) == 1 is not TRUE
しかし:
filter(tbl_df(predicted), Species == "setosa")
## Source: local data frame [101 x 3]
##
## predicted Petal.Width Species
## (dbl[10]) (dbl) (chr)
## 1 1.294574 0.00 setosa
## 2 1.327482 0.05 setosa
## 3 1.360390 0.10 setosa
## 4 1.393365 0.15 setosa
## 5 1.426735 0.20 setosa
## 6 1.460927 0.25 setosa
## 7 1.496477 0.30 setosa
## 8 1.533949 0.35 setosa
## 9 1.573888 0.40 setosa
## 10 1.616810 0.45 setosa
## .. ... ... ...
そしてので問題はfilter()
です:私もオブジェクトにフィルタの結果を保存し、使用してみました
pick <- predicted$Species == "setosa"
ggplot(predicted[pick,],aes(x=Petal.Width, y = predicted)) +
geom_point()
それは直接ggplot()
にありますが、それは同じエラーがあります。
回避策があるので、明らかに危機ではありませんが、私の精神的な の使用方法のモデルは明らかに間違っています!どんな洞察力も多く に感謝します。
編集:私が最初に投稿したとき、私はまだR 3.2.3を使用していましたが、ggplot2とdplyrから警告を受けていました。だから私は3.3.0にアップグレードし、それはまだ起こっている。
## R version 3.3.0 (2016-05-03)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 10586)
##
## locale:
## [1] LC_COLLATE=English_United States.1252
## [2] LC_CTYPE=English_United States.1252
## [3] LC_MONETARY=English_United States.1252
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United States.1252
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] mgcv_1.8-12 nlme_3.1-127 ggplot2_2.1.0 dplyr_0.4.3
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.12.3 knitr_1.11 magrittr_1.5 munsell_0.4.2
## [5] colorspace_1.2-6 lattice_0.20-33 R6_2.1.1 stringr_1.0.0
## [9] plyr_1.8.3 tools_3.3.0 parallel_3.3.0 grid_3.3.0
## [13] gtable_0.1.2 DBI_0.3.1 htmltools_0.2.6 lazyeval_0.1.10
## [17] yaml_2.1.13 assertthat_0.1 digest_0.6.8 Matrix_1.2-6
## [21] formatR_1.2 evaluate_0.7.2 rmarkdown_0.9.5 labeling_0.3
## [25] stringi_1.0-1 scales_0.3.0
しかし、なぜfilter()は結果をうまく印刷しますが、それをggplot()に渡すことができませんか? ggplot()は結果が配列b/cクラス(predict [pick、 "predicted"])であることを気にしません)配列であり、私はそのプロットを作ることができます。 – atiretoo
詳細情報を追加して更新してください。 – mtoto
はい、そうです - それはfilter()のバグだと思います。 – atiretoo