在使用正则表达式之前,我已经为此制定了一个非常冗长的解决方案,但我希望有一种更原生的方法来做到这一点。
给定一个模型,也许像
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 的好回答,我构建了一个复杂的示例,其中正则表达式可能会失败。这是正则表达式让我害怕的边缘情况之一。
它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
。
是的,这是一个愚蠢的例子,但很容易发生。