次のような式を受け入れる関数を R で作成しようとしています。
y ~ 1 + sex + age + (1 | school) + (1 | school:section)
関数で使用するために、この数式のさまざまなコンポーネントを抽出する簡単な方法はありますか? たとえば、左辺、各変数、変量効果変数、およびそれらがどのようにネストされているかなどを取得できるようにしたいと考えています.
数式解析ツリーをたどるよりも簡単な方法はありますか?
正規表現を必要としないソリューションが必要な場合は、 を検討することをお勧めしますterms
。
form <- y ~ 1 + sex + age + (1 | school) + (1 | school:section)
terms(form)
## y ~ 1 + sex + age + (1 | school) + (1 | school:section)
## attr(,"variables")
## list(y, sex, age, 1 | school, 1 | school:section)
## attr(,"factors")
## sex age 1 | school 1 | school:section
## y 0 0 0 0
## sex 1 0 0 0
## age 0 1 0 0
## 1 | school 0 0 1 0
## 1 | school:section 0 0 0 1
## attr(,"term.labels")
## [1] "sex" "age" "1 | school" "1 | school:section"
## attr(,"order")
## [1] 1 1 1 1
## attr(,"intercept")
## [1] 1
## attr(,"response")
## [1] 1
## attr(,".Environment")
## <environment: R_GlobalEnv>
さらに、次を使用して属性を抽出できますattributes
。
attributes(terms(form))$term.labels
## [1] "sex" "age" "1 | school" "1 | school:section"
多分次のようなものです:
x <- as.formula("y ~ 1 + sex + age + (1 | school) + (1 | school:section)")
x[[2]]
x[[3]][2]
次のように使用することもできますstrsplit
。
strsplit(as.character(x[[3]][2]), "\\+")
> form <- y ~ 1 + sex + age + (1 | school) + (1 | school:section)
> form[1]
`~`()
> form[2]
y()
> form[3]
1 + sex + age + (1 | school) + (1 | school:section)()
したがって、基本的には、LHS と RHS をリスト要素として扱う必要があります。RHS を分割するには、TylerRinker の回答を使用できます。