私はpurrr
パラダイムに不慣れで、苦労しています。
データ フレームをネストし、ネストされたデータで線形モデルを実行し、各 lm からいくつかの係数を抽出し、各 lm の要約を生成するために、私がなんとか取得したいくつかのソースに従ってください。私がやりたい最後のことは、要約から「r.squared」を抽出することです(これは、私が達成しようとしていることの最も単純な部分だと思います)が、何らかの理由で構文を取得できません右。
これが私が持っているもののMWEです。
library(purrr)
library(dplyr)
library(tidyr)
mtcars %>%
nest(-cyl) %>%
mutate(fit = map(data, ~lm(mpg ~ wt, data = .)),
sum = map(fit, ~summary))
そして、失敗した r.squared を抽出する私の試みは次のとおりです。
mtcars %>%
nest(-cyl) %>%
mutate(fit = map(data, ~lm(mpg ~ wt, data = .)),
sum = map(fit, ~summary),
rsq = map_dbl(sum, "r.squared"))
Error in eval(substitute(expr), envir, enclos) : `x` must be a vector (not a closure)
これは、RStudio サイトにある例と表面的には似ています。
mtcars %>%
split(.$cyl) %>%
map(~ lm(mpg ~ wt, data = .x)) %>%
map(summary) %>%
map_dbl("r.squared")
これは機能しますが、r.squared 値を新しい列に配置して (したがって mutate ステートメント)、問題を回避するのではなく、コードが機能しない理由を理解したいと考えています。
編集:
以下のソリューションを使用することになった実用的なソリューションを次に示します。
mtcars %>%
nest(-cyl) %>%
mutate(fit = map(data, ~lm(mpg ~ wt, data = .)),
summary = map(fit, glance),
r_sq = map_dbl(summary, "r.squared"))
編集2:
したがって、実際には、このバグは summary = map(fit, ~summary) 行にチルダ キーが含まれていることが原因であることがわかります。私の推測では、オブジェクトは、要約自体によって返されるオブジェクトではなく、ネストされた関数になります。誰かが参加したい場合は、これに関する信頼できる回答が欲しい.
明確にするために、元のコードのこのバージョンは正常に動作します。
mtcars %>%
nest(-cyl) %>%
mutate(fit = map(data, ~lm(mpg ~ wt, data = .)),
summary = map(fit, summary),
r_sq = map_dbl(summary, "r.squared"))