是否有一种雄辩的方法可以ddply()
用来获得不仅定义的最细粒度组的输出,还可以获得这些子组的组的输出?
换句话说,当其中一个分类器是“任何”或“任一”或“无关紧要”时。在两个分组变量的简单情况下,这可以通过单独调用来完成ddply
;但是,当有三个或更多分类器都可以设置为“任何”时,由于必须ddply
为“任何”+其他的每个新组合一遍又一遍地运行,这会变得很混乱。
可重现的例子:
require(plyr)
## create a data frame with three classification variables
## and two numeric variables:
df1=data.frame(classifier1 = LETTERS[sample(2,200,replace=T)],
classifier2 = letters[sample(3,200,replace=T)],
classifier3 = rep(c("foo","bar"),100),
VAR1 = runif(200,50,250),
VAR2 = rnorm(200,85,20))
## apply an arbitrary function to subsets of df1; that is, all unique
## combinations of the three classifiers.
dlply(df1, .(classifier1,classifier2,classifier3),
function(df) lm(VAR1 ~ VAR2, data=df))
$A.a.bar
Call:
lm(formula = VAR1 ~ VAR2, data = df)
Coefficients:
(Intercept) VAR2
230.5555 -0.8591
$A.a.foo
Call:
lm(formula = VAR1 ~ VAR2, data = df)
Coefficients:
(Intercept) VAR2
128.3078 0.3631
...
现在,如果我想在不包括任何/所有分类器的情况下为更多组获得相同的输出怎么办。例如,如果我想包含 when classifier1="any",我只会在dlply
语句中包含 classifier2 和 classifier3,如下所示:
dlply(df1, .(classifier2,classifier3), function(df) lm(VAR1 ~ VAR2, data=df))
如果我想获得分类器 2 和分类器 3 =“任何”时的输出,我将再次从ddply
调用中删除并且只包括分类器 1:
dlply(df1, .(classifier1), function(df) lm(VAR1 ~ VAR2, data=df))
但是,当我的分类器多于三个时,这会变得笨拙,并且每个分类器都可以取出(即=“任何”)——组合的数量大大增加。是否有一种雄辩/快速的方法来获取我的数据的所有“组组”的输出?