<<results=tex>>=
    ranks <- positions
    ranks <- ranks[ranks$latest & ranks$frm,]
    ranks <- ranks[ranks$evaluator %in% c('CorpusEvaluator', combined_evaluators),]
    ranks$evaluator <- droplevels(ranks$evaluator)
    mrrs <- daply(ranks, .(project, evaluator), function(x) mean(1/x$position))
    mrrs <- round(mrrs, 2)
    tests <- cast(ranks, project + bug_number + bug_id ~ evaluator, value=.(position))
    mrr_test <- function(project) {
        test <- function(evaluator) {
            wilcox.test(1/project$CorpusEvaluator, 1/project[[evaluator]], paired=TRUE, alternative='less')[['p.value']]
        }
        sapply(combined_evaluators, test)
    }
    tests <- daply(tests, .(project), mrr_test)
    for(evaluator in combined_evaluators){
        mrrs[,evaluator] <- paste(mrrs[,evaluator], ifelse(tests[,evaluator]<0.01, '*', ''), sep='')
    }
    colnames(mrrs) <- format_name(colnames(mrrs))
    rownames(mrrs) <- format_name(rownames(mrrs))
    print(xtable(t(mrrs), caption='Mean reciprocal ranks for corpus and combined approaches on each project, and results of paired Wilcoxon tests', label='tab:combined_ranks'), table.placement='tb')
@
