在R中,"data.frame的标准公式接口"是什么意思?

Uri*_*son 7 aggregate r

aggregate各州的文件:

'aggregate.formula'是'aggregate.data.frame'的标准公式接口.

我是R的新手,我不明白这意味着什么.请解释!

谢谢!

乌里

Dir*_*tel 10

跳转到示例部分的中间,help(aggregate)您将看到:

 ## Formulas, one ~ one, one ~ many, many ~ one, and many ~ many:
 aggregate(weight ~ feed, data = chickwts, mean)
 aggregate(breaks ~ wool + tension, data = warpbreaks, mean)
 aggregate(cbind(Ozone, Temp) ~ Month, data = airquality, mean)
 aggregate(cbind(ncases, ncontrols) ~ alcgp + tobgp, data = esoph, sum)
Run Code Online (Sandbox Code Playgroud)

四个不同的调用aggregate(),都使用公式界面.上面用你引用的内容写的方式与整个R中使用的方法调度机制有关.

考虑第一个例子:

R> class(weight ~ feed)
[1] "formula"
R> class(chickwts)
[1] "data.frame"
Run Code Online (Sandbox Code Playgroud)

所以聚合调度它的第一个参数(类formula).在R中解析公式的方式通常围绕a model.matrix,我假设在这里发生了类似的事情,并且最终aggregate.data.frame使用第二个参数chickwtsa 执行等效调用data.frame.

R> aggregate(weight ~ feed, data = chickwts, mean)
       feed  weight
1    casein 323.583
2 horsebean 160.200
3   linseed 218.750
4  meatmeal 276.909
5   soybean 246.429
6 sunflower 328.917
R> 
Run Code Online (Sandbox Code Playgroud)

你问的不是最简单的初学者问题,如果你有一个方便的话,我建议你仔细查看一些文档和一本体面的R书.(以及其他SO问题会给出关于下一步要阅读的内容的建议.)

编辑:我不得不挖掘一点,因为aggregate.formula()没有从stats命名空间导出,但你可以通过stats:::aggregate.formula在提示符下键入来查看它- 然后清楚地显示它确实发生,事实上,调度到aggregate.data.frame():

 [.... some code omitted ...]
    if (is.matrix(mf[[1L]])) {
        lhs <- as.data.frame(mf[[1L]])
        names(lhs) <- as.character(m[[2L]][[2L]])[-1L]
        aggregate.data.frame(lhs, mf[-1L], FUN = FUN, ...)
    }
    else aggregate.data.frame(mf[1L], mf[-1L], FUN = FUN, ...)
}
<environment: namespace:stats>
R> 
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法在不命名`cbind()`中的所有列的情况下执行此操作?对于多列,我想我不明白为什么一个人不能做`aggregate(.~var,...)`或者名字< - c("var1","var2",...)`然后`aggregate(df [,names] ~var,...)`.或者这是不可能的? (4认同)