Re: [R] Remove empty list from list

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Tue 29 Aug 2006 - 03:29:46 EST

See this post from the weekend:
http://www.nabble.com/Re%3A-How-to-iteratively-extract-elements-out-of-a-list-p6002980.html

On 8/28/06, Muhammad Subianto <msubianto@gmail.com> wrote:
> Dear all,
> I am still working with "list".
> If I have an empty list how can I remove from list data.
> Here is a toy example:
> x <- list(matrix(1:20, 5, 4),matrix(1:20, 5, 4),matrix(1:20, 5,
> 4),matrix(1:20, 5, 4),matrix(1:20, 5, 4))
> y <- list(c(1, -1, -1, 1, 1),c(1, 1, -1, -1, -1),c(1, 1, 1, 1, 1),c(1,
> 1, -1, 1, -1),c(-1, -1, -1, -1, -1))
> ## Thanks to Gabor Grothendieck for this trick.
> ## SIMPLIFY? SIMPLIFY >< simplify
> xy.list <- mapply(cbind, x, y, SIMPLIFY=FALSE)
>
> point.class <- t(cbind(c(10,20,15,4,-1),c(21,10,15,34,-1),c(11,13,6,3,1),c(7,5,5,2,1),c(8,9,5,12,-1)))
> class.diffsame <- points.neighb(as.matrix(point.class), xy.list, 5)
> pd.class <- points.diff(class.diffsame,xy.list)
>
> nc.test <- vector("list",length(pd.class))
> for (i in 1:length(pd.class)) {
> nc.test[[i]] <- pd.class[[i]]\$point.diff
> }
> nc.test
> > nc.test
> [[1]]
> [,1] [,2] [,3] [,4] [,5]
> [1,] 1 6 11 16 1
> [2,] 4 9 14 19 1
> [3,] 5 10 15 20 1
>
> [[2]]
> [,1] [,2] [,3] [,4] [,5]
> [1,] 1 6 11 16 1
> [2,] 2 7 12 17 1
>
> [[3]]
> [,1] [,2] [,3] [,4] [,5]
>
> [[4]]
> [,1] [,2] [,3] [,4] [,5]
> [1,] 3 8 13 18 -1
> [2,] 5 10 15 20 -1
>
> [[5]]
> [,1] [,2] [,3] [,4] [,5]
>
> >
> I want to remove these:
> nc.test[[3]]
> nc.test[[5]]
> Because my list data have more 1000 lists are there any simple way to do this?
>
>
>
> points.neighb <- function(p.class, list.nc, class.col) {
> ntuples <- nrow(p.class)
> instvec <- vector("list",length=ntuples)
> for (i in 1:ntuples) {
> # Thanks to Petr Pikal for this trick
> instvec[[i]]\$class.diff <- (p.class[i,class.col] -
> list.nc[[i]][,class.col])!=0
> instvec[[i]]\$class.same <- (p.class[i,class.col] -
> list.nc[[i]][,class.col])==0
> }
> instvec
> }
>
> points.diff <- function(p.class, list.nc) {
> ntuples <- length(list.nc)
> instvec <- vector("list",ntuples)
> for (i in 1:ntuples) {
> instvec[[i]]\$point.diff <- list.nc[[i]][p.class[[i]]\$class.diff,]
> instvec[[i]]\$point.same <- list.nc[[i]][p.class[[i]]\$class.same,]
> }
> instvec
> }
>
> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help