map関数を使ってグループ単位に処理を適用する
map関数についてはTokyoRの@kilometerさんの記事がよくわかる。https://qiita.com/kilometer/items/7184904765fbf0f33f04
ここではハマった内容を残しておく。
- 間違い(動かない)
iris |> group_by(Species) |> nest() |> mutate(result = map(.x = data, .f=~shapiro.test(Sepal.Length))) Error in `mutate()`: ℹ In argument: `result = map(.x = data, .f = ~shapiro.test(Sepal.Length))`. ℹ In group 1: `Species = setosa`. Caused by error in `map()`: ℹ In index: 1. Caused by error in `stopifnot()`: ! オブジェクト 'Sepal.Length' がありません
- 正しい(r-wakalangでKDさんに教わった)
iris |> group_by(Species) |> nest() |> mutate(result = map(.x = data, .f=~shapiro.test(.x$Sepal.Length)))
同じ目的を達成するには別の方法がある(by KD)
- 基本
iris |> summarize(result = list(shapiro.test(Sepal.Length)), .by = Species) |> unpack(result)
- 解析結果をきれいな data.frame として持ちたいとき
iris |> summarize(result = broom::tidy(shapiro.test(Sepal.Length)), .by = Species) |> unpack(result)
- 解析結果を list として持ちたいとき
iris |> summarize(result = list(shapiro.test(Sepal.Length)), .by = Species) |> deframe()
Last updated 2023-02-28 | auditR (c) N.Nawata