[R] building formula objects

Russell Senior seniorr at aracnet.com
Wed Jul 10 01:43:45 CEST 2002


>>>>> "Bill" == Bill Venables <Bill.Venables at cmis.csiro.au> writes:

Bill> [WNV] [...] See the Programmer's Niche article in the latest
Bill> edition of R news for a general strategy for handling this kind
Bill> of problem (at the risk of touting my own stuff).

The goal of my exercise it to create a nice blob of data that I can
export, ultimately, into a document table.

I've got a data frame called pe.ours which contains a bunch of
response variables kept in a list, raymonds:

  > raymonds
   [1] "twa"    "twa.bh" "rcm"    "rcm2"   "s25"    "s5"     "l4"     "l16"   
   [9] "e4"     "e16"    "p90"    "p95"    "p99"    "max"   

For this go-round, I am just looking at the factor, my.factor, (also a
member of pe.ours), so my function is:

  russell <- function(n) {
    tAsgn <- paste("tList[[n]] <- try(anova(lm(X ~ my.factor, data=pe.ours)))",
                   sep="")
    tAsgn <- parse(text = tAsgn)[[1]]
    TAsgn <- do.call("substitute", list(tAsgn, list(X = as.name(n))))
    eval(TAsgn)
  } 

Then I use sapply, as in:

  > t(sapply(raymonds,russell)) -> tmp

If I coerce the individual "rows" in the result to data frames, e.g.:

  > as.data.frame(tmp[1,])
     Df    Sum.Sq   Mean.Sq  F.value       Pr..F.
  1   4  161.3588 40.339705 23.10912 2.988881e-18
    955 1667.0654  1.745618       NA           NA

and even:

  > apply(tmp,1,as.data.frame)
  $twa
     Df    Sum.Sq   Mean.Sq  F.value       Pr..F.
  1   4  161.3588 40.339705 23.10912 2.988881e-18
    955 1667.0654  1.745618       NA           NA

  $twa.bh
     Df     Sum.Sq   Mean.Sq F.value       Pr..F.
  1   4   3.577902 0.8944754 6.57847 3.186600e-05
    955 129.851484 0.1359701      NA           NA

   [snip]

  $p99
     Df    Sum.Sq  Mean.Sq   F.value    Pr..F.
  1   4    497.49 124.3725 0.7928758 0.5298613
    955 149803.70 156.8625        NA        NA

  $max
     Df      Sum.Sq   Mean.Sq   F.value    Pr..F.
  1   4    20685.82  5171.456 0.1604102 0.9582729
    955 30788197.64 32238.950        NA        NA


I get something very close to what I want, but now I want to collect
these tmp rows into a single data frame that I can cleanly pass to
write.table().  Something like:

     Df    Sum.Sq   Mean.Sq  F.value       Pr..F.
  1   4  161.3588 40.339705 23.10912 2.988881e-18
    955 1667.0654  1.745618       NA           NA
  1   4   3.577902 0.8944754 6.57847 3.186600e-05
    955 129.851484 0.1359701      NA           NA
  1   4    497.49 124.3725 0.7928758 0.5298613
    955 149803.70 156.8625        NA        NA
  1   4    20685.82  5171.456 0.1604102 0.9582729
    955 30788197.64 32238.950        NA        NA

A bonus would be to retain the rownames somehow.

I am just not yet "getting" R's multi-dimensional data objects and how
to manipulate them.

-- 
Russell Senior         ``The two chiefs turned to each other.        
seniorr at aracnet.com      Bellison uncorked a flood of horrible       
                         profanity, which, translated meant, `This is
                         extremely unusual.' ''                      
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list