Наткнулся на просторах сети (в группе по R на linkedin, если точнее) на пост про презентацию по использованию SAS и R в оценке кредитных рисков. Сама презентация тут. Про сами риски я почти ничего не понял, но вот сравнение кусков кода SAS и R и описание со стороны плюсов и минусов данных программ весьма интересно. Я сам SAS никогда не использовал, но, судя по коду, язык этот более жесткий, нежели R, например требуется явное объявление переменных. Кстати, вот кусок кода из презентации:

outdat <- local({
    res <- t(sapply(split(indat, indat[c("a", "b")]), function(subset) {
        c(xmean = weighted.mean(subset$x, subset$w),
          ymean = weighted.mean(subset$y, subset$w),
          yvar = cov.wt(subset["y"], subset$w)$cov)
    }))
    levs <- aggregate(w ~ a + b, data=indat, sum)
    cbind(levs, as.data.frame(res))
})

Не совсем понял, что автор хотел тут сделать, но судя по всему, речь идет о вычислении взвешенных средних и коэффициентов ковариации по группам. Как отмечено в самой презентации, thank God for plyr.

library(plyr) 
library(doBy) #оттуда берем данные dietox - диета свиней =)
data(dietox)
 
ddply(dietox, ~Evit+Cu, summarise, mean_weight=mean(Weight), wmean_weight=weighted.mean(Weight,Start,na.rm=T), 
                                   mean_feed=mean(Feed, na.rm=T), wmean_feed=weighted.mean(Feed, Start,na.rm=T), 
                                   var_feed=cov.wt(as.matrix(Weight), Start)$cov)
 
     Evit    Cu mean_weight wmean_weight mean_feed wmean_feed var_feed
1 Evit000 Cu000    61.24760     61.64218  79.37792   79.58085 614.1595
2 Evit000 Cu035    59.34373     60.16507  81.19432   81.56672 626.9288
3 Evit000 Cu175    61.23332     63.05016  84.37955   87.10824 675.0722
4 Evit100 Cu000    61.43577     61.85480  77.46552   77.60646 628.9771
5 Evit100 Cu035    61.29998     61.83024  81.04773   81.67000 652.9055
6 Evit100 Cu175    64.40420     65.00236  86.72299   87.12963 658.2170
7 Evit200 Cu000    58.30735     59.01266  76.35517   76.67036 597.4171
8 Evit200 Cu035    58.63146     58.83613  79.13939   79.55219 565.0728
9 Evit200 Cu175    60.97602     61.79067  80.88636   81.31141 636.9713

Вместо x и y здесь Weight (вес свиньи) и Feed (сколько она жрет корма), вместо weight — Start (начальный вес свиньи), вместо a и b — Evit (витамины) и Cu (содержание меди в лекарстве). Вычисляем средние и взвешенные средние, а также взвешенную дисперсию.