いくつかのグループを持つデータセット「キーワード」があります。glm を各グループに個別に適用して、グループごとに 1 つのフィットを持つ glm フィットのリストを作成したいと考えています。
forループでこれを行うこともできますが、それは R の精神ではありません。代わりに、 by関数を使用して実行しようとしました。
CTR.glm <- by(keywords,keywordsInSample,
function(x) ifelse(nlevels(factor(x$AveragePosition))>20, # only these keywords will be fit
glm(Clicks ~ poly(log(AveragePosition),2) + offset(log(Impressions)),
family = poisson,data = x),
NA)) # for functions that can't be fit
問題は、glmは通常、あらゆる種類のグッズを抽出できる glm クラス オブジェクトを返すのに対し、byはリストを返すことです。
> CTR.glm[2]
$`text of second keyword`
(Intercept) poly(log(AveragePosition), 2)1 poly(log(AveragePosition), 2)2
-3.626237 -5.108795 -1.751032
> class(CTR.glm[2])
[1] "list"
フィットのパラメーターを除いて、すべての情報が失われています。リストに関するすべての情報を強制的に保持する方法はありますか?
ps、plyrツールボックスを使用してみましたが、キーワードにスペースが含まれているために動かなくなりました。
pps、この投稿には「by」というタグを付ける必要がありますが、そのタグを作成できません (stackoverflow の新機能)。