正規表現を使用する前に、これに対する非常に長い解決策を考え出しましたが、よりネイティブな方法で解決できることを願っています。
モデルを考えると、おそらく次のようになります
data(tips, package="reshape2")
mod <- lm(tip ~ total_bill*sex + sex*day, tips)
mod$coefficients
どの係数が式のどの変数に対応するかを特定したいと考えています。このような:
| Coefficient | Variable |
|:-------------------|:---------------|
| total_bill | total_bill |
| sexMale | sex |
| daySat | day |
| daySun | day |
| dayThur | day |
| total_bill:sexMale | total_bill,sex |
| sexMale:daySat | sex,day |
| sexMale:daySun | sex,day |
| sexMale:dayThur | sex,day |
私は調べmodel.matrix
ましmodel.formula
たが、それらは私をこのコード行に導きました
.Internal(model.matrix(t, data))
私は C コードに飛び込みましたが、もっと簡単な方法が必要だと考えました。ある?
DWin の素敵な答えに応えて、正規表現が失敗する可能性のある複雑な例を作成しました。これは、正規表現が私を怖がらせるエッジケースの 1 つです。
はdata.frame
、頻繁に発生する混乱しやすい変数名と値で構築されています。
baseball <- data.frame(Bat=sample(1:100, 20, replace=T), Batter=sample(c("David", "Batley", "Bob", "Ace"), 20, replace=T), Hits=sample(1:20, 20, replace=T))
baseball
bMod <- lm(Hits ~ Bat*Batter, baseball)
bMod$coefficients
col.matx <- sapply(colnames(model.matrix(bMod)), function(cols) sapply(labels(bMod), function(trm) grep(patt=trm, x=cols, value=TRUE)))
これは、連続変数Bat
を のすべての係数に一致させfactor
Batter
ます。
はい、これはばかげた例ですが、簡単に発生する可能性があります。