[R] Listing function displayed as a table

Adaikalavan Ramasamy ramasamy at cancer.org.uk
Mon Mar 26 16:44:57 CEST 2007


Something ugly like this?

Lst <- list()
Lst[[1]] <- list(name="Fred", wife="Mary", no.children=3, 
child.ages=c(4,7,9))
Lst[[2]] <- list(name="Barney", wife="Liz", no.children=2, 
child.ages=c(3,5))

cbind( do.call("rbind", as.list(Lst))[ ,-4],
        child.ages=sapply( Lst, function(myli)
                                  paste(myli$child.ages, collapse=",") ))


Why don't you just save the data in a dataframe instead of a list to 
begin with ? The only variable I can see that has multiple values is 
child.ages. Or create one row per record as in most databases. The 
choice depends on your input.

  df <- rbind( c("Fred", "Mary", 4), c("Fred", "Mary", 7),
               c("Fred", "Mary", 9), c("Barney", "Liz", 3),
               c("Barney", "Liz", 5) )
  df <- data.frame(df)
  colnames(df) <- c("Father", "Mother", "Child.Age")
  df$Child.Age <- as.numeric(as.character(df$Child.Age))

  parents <- paste( df$Father, df$Mother, sep="+" )

  getstats <- function(x) c( values=paste(x, collapse=","),
                  mean=round(mean(x),2), youngest=min(x), oldest=max(x) )

  do.call( rbind, tapply( df$Child.Age, parents, getstats ) )

              values  mean   youngest oldest
  Barney+Liz "3,5"   "4"    "3"      "5"
  Fred+Mary  "4,7,9" "6.67" "4"      "9"


Regards, Adai



Schmitt, Corinna wrote:
> Hallo,
> good idea it is working. A new question appears: How can I display the entries in a table like
> 
>  name       wife          no.children  child.ages
> Fred        Mary            3           4,7,9
> Barney      Liz             2           3,5
> 
> Thanks, Corinna
> 
> 
> -----Ursprüngliche Nachricht-----
> Von: Michael T. Mader [mailto:m.mader at gsf.de] 
> Gesendet: Montag, 26. März 2007 15:32
> An: Schmitt, Corinna; r-help at stat.math.ethz.ch
> Betreff: Re: [R] Listing function
> 
> Lst <- list()
> Lst[[1]] <- list(name="Fred", wife="Mary", no.children=3, 
> cild.ages=c(4,7,9))
> Lst[[2]] <- list(name="Barney", wife="Liz", no.children=2, cild.ages=c(3,5))
> 
> I.e. a list of lists
> 
> Regards
> 
> Michael
> 
> Schmitt, Corinna wrote:
>> Hallo,
>>
>> I build a list by the following way:
>>
>> Lst = list(name="Fred", wife="Mary", no.children=3, cild.ages=c(4,7,9))
>>
>> I know how I can extract the information one by one. But now I want to
>> add a new entry which looks like
>>
>> name="Barney", wife="Liz", no.children=2, cild.ages=c(3,5)
>>
>> How can I add this information to Lst without overwriting the first
>> entry?
>> How can I then extract the corresponding information if I have both
>> entries in Lst?
>>
>> Thanks for helping,
>>
>> Corinna
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>



More information about the R-help mailing list