[R] Selections in lists

David Winsemius dwinsemius at comcast.net
Thu Aug 25 21:09:24 CEST 2011


On Aug 25, 2011, at 11:24 AM, mdvaan wrote:

> Hi,
>
> I have produced a list g and I would like to reduce the amount of
> information contained in each object in g.
> For each matrix I would like to keep the values where the column  
> name equals
> g[year][[1]][[x]] and the row names equals g[year][[1]][[-x]]. So in
> g$`1999`$`8029`, year = 1999 and x = 8029. I have been experimenting  
> with
> the subset function, but have been unsuccesful. Thanks for your help!
>

I suspect this is because you g object does not have the structure  
that you imagine for it:

 > str(g)
List of 3
  $ 1997: num [1:4, 1:4] 3 2 1 1 2 3 0 1 1 0 ...
   ..- attr(*, "dimnames")=List of 2
   .. ..$ B: chr [1:4] "8025" "8026" "8027" "8029"
   .. ..$ B: chr [1:4] "8025" "8026" "8027" "8029"
  $ 1998: num [1:4, 1:4] 2 1 1 0 1 3 1 1 1 1 ...
   ..- attr(*, "dimnames")=List of 2
   .. ..$ B: chr [1:4] "8025" "8026" "8027" "8029"
   .. ..$ B: chr [1:4] "8025" "8026" "8027" "8029"
  $ 1999: num [1:5, 1:5] 2 1 1 0 0 1 3 2 0 1 ...
   ..- attr(*, "dimnames")=List of 2
   .. ..$ B: chr [1:5] "8025" "8026" "8027" "8028" ...
   .. ..$ B: chr [1:5] "8025" "8026" "8027" "8028" ...

The things you think are list indices are really in the 'dimnames'  
attributes of the objects.


-- 
David
> The result for g$`1999`$`8029` should be:
>
> $`1999`$`8029`
>      B
> B      8029
>  8026    1
>  8027    1
>  8028    1
>
> The result for g$`1999`$`8028` should be:
>
> $`1999`$`8028`
>      B
> B      8028
>  8029    1
>
>
> The result for g$`1999`$`8027` should be:
>
> $`1999`$`8027`
>      B
> B       8027
>  8025     1
>  8026     2
>  8029     1
>
>
> Example:
>
> DF = data.frame(read.table(textConnection("  A  B  C
> 80  8025  1995
> 80  8026  1995
> 80  8029  1995
> 81  8026  1996
> 82  8025  1997
> 82  8026  1997
> 83  8025  1997
> 83  8027  1997
> 90  8026  1998
> 90  8027  1998
> 90  8029  1998
> 84  8026  1999
> 84  8027  1999
> 85  8028  1999
> 85  8029  1999"),head=TRUE,stringsAsFactors=FALSE))
>
> e <- function(y) crossprod(table(DF[DF$C %in% y, 1:2]))
> years <- sort(unique(DF$C))
> f <- as.data.frame(embed(years, 3))
> g<-lapply(split(f, f[, 1]), e)
> years<-names(g)
> for (t in seq(years))
>        {
>        year=as.character(years[t])
>        g[[year]]<-sapply(colnames(g[[year]]), function(var)
> g[[year]][g[[year]][,var]>0, g[[year]][var,]>0])
>        }
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Selections-in-lists-tp3768562p3768562.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org 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.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list