私はpurrr
パラダイムが新しく、苦労しています。モデルの要約を抽出し、新しい列として保存します。
私は、データフレームをネストし、ネストされたデータに対して線形モデルを実行し、各画像からいくつかの係数を抽出し、各画像ごとに要約を生成するまで、いくつかの情報源に従っています。私がしたい最後のことは、(私が達成しようとしているものの中で最も単純な部分であると思っていただろう)要約から "r.squared"を抽出することですが、何らかの理由で私は構文を得ることができません右。
library(purrr)
library(dplyr)
library(tidyr)
mtcars %>%
nest(-cyl) %>%
mutate(fit = map(data, ~lm(mpg ~ wt, data = .)),
sum = map(fit, ~summary))
、ここでは失敗しr.squaredを抽出する私の試みです:
はここで働く私が持っているもののMWEだ
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文)、問題の回避の代わりにコードが機能しない理由を理解したいと思います。
EDIT:
ここで私は下のソリューションを使用しに来た作業溶液だ:
mtcars %>%
nest(-cyl) %>%
mutate(fit = map(data, ~lm(mpg ~ wt, data = .)),
summary = map(fit, glance),
r_sq = map_dbl(summary, "r.squared"))
EDIT 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"))
これは私がやりたがっているようですが、なぜコードがこのように構築されたのか混乱しています。なぜ私はあなたがデータをアンネストしたのか分かりません。できるかどうか説明できますか? 答えをありがとう! – niklz
'unnest'を使うと、リストの列からデータフレームを取り出し、使用可能なすべての列を親データフレームに広げます。ネストされたままにすることはできますが、r-squaredカラムは直接アクセスできません。私は 'unnest'なしでコードを持つように答えを更新します。 –
マップ(fit、〜glance)ステートメントの結果が不必要なので、混乱している入れ子になっていないと思った。 この方法は、要約を含む合計列を作成する必要性を回避します。私が理解すれば; 2番目のバージョンのcoeffs列には同じ情報が含まれています(ただし、別の形式でも同じです)。 私は「r.squared」を集計列から抽出する方法はありませんか?ちょうど私がネストされたリストを持っているところで再びこの壁に当たっているのを見て、そこからただ一つの要素を取り出そうと思っています。 – niklz