1. # create big data frame:
  2. n <- 1000
  3. x <- data.frame(group = sample(letters[1:4], n, replace=TRUE), condition = sample(LETTERS[1:10], n, replace = TRUE), data = rnorm(n))
  4.  
  5. # reasonable operations:
  6. marginal.means.1 <- aggregate(data ~ group + condition, data = x, FUN=mean)
  7.  
  8. # unreasonable operations:
  9. marginal.means.2 <- marginal.means.1[NULL,]
  10.  
  11. row.counter <- 1
  12. for (condition in levels(x$condition)) {
  13.   for (group in levels(x$group)) {  
  14.     tmp.value <- 0
  15.     tmp.length <- 0
  16.     for (c in 1:nrow(x)) {
  17.       if ((x[c,"group"] == group) & (x[c,"condition"] == condition)) {
  18.         tmp.value <- tmp.value + x[c,"data"]
  19.         tmp.length <- tmp.length + 1
  20.       }
  21.     }
  22.     marginal.means.2[row.counter,"group"] <- group
  23.     marginal.means.2[row.counter,"condition"] <- condition
  24.     marginal.means.2[row.counter,"data"] <- tmp.value / tmp.length
  25.     row.counter <- row.counter + 1
  26.   }
  27. }
  28.  
  29. # does it produce the same results?
  30. all.equal(marginal.means.1, marginal.means.2)