出題編3日目の解答編です。
あくまでも@kosugittiはこうした,というだけで唯一の正解でもなければ最適なコードとは言えないかもですが。
myModel <- function(x, b0, b1) {
b0 + b1 * x
}
plot.list <- list()
for (g in 1:NROW(dat_lm)) {
plot.list[[g]] <- dat_lm[g, ] %>%
unnest(data) %>%
ggplot(aes(x = Sepal.Width, y = Petal.Length)) +
geom_point(color = g) +
stat_function(fun = myModel, args = list(b0 = dat_lm[g, ]$b0, b1 = dat_lm[g, ]$b1), color = g) +
ggtitle(dat_lm[g, ]$Species)
}
g <- do.call(gridExtra::grid.arrange, plot.list)
plot(g)
まず自作関数を作りました。今回はただの直線ですが,ここは必要に応じて変更していただければと思います
で,図のggplotオブジェクトを格納するリストを作って,for
文で毎行のデータから図を作る,という作業をしています。
最後にgridExtra::grid.arrangeを全部のリストに適用してプロット。これでできました。
このやり方だと,ggplot関数が自由にいじれるので結構便利かなと思っています。
for文を使うあたりが美しくない。purrr::mapとかのほうがいいのかも。でもこっちの方が私には直感的に分かりやすかったんですよねー。
こんな感じで,自分のTips,こんなバグをこうやって解決したよ,というような話を,よろしければ皆さんもお寄せください。
出題編はこちらです。
あるいは「こちらの解法のほうが美しいぞ」というのがありましたら,コメントいただけると幸いです。