# Re: [R] Remove empty list from list - remove only one row and make as matrix

Date: Tue 29 Aug 2006 - 21:22:36 EST

```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

# delete null/empty entries in a list
dff <- delete.NULLs(nc.test)
dff; str(dff)
> dff
[[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] 1 6 11 16 1

[[3]]

[,1] [,2] [,3] [,4] [,5]
[1,] 3 8 13 18 -1
[2,] 5 10 15 20 -1

>

lapply(dff, nrow)
> lapply(dff, nrow)
[[1]]
[1] 3

[[2]]

NULL
[[3]]
[1] 2

>

#I can use
#dff[unlist(lapply(dff, nrow) == 1)] #2,3, etc

I have two questions here:
a. I need to remove dff[[2]]
b. How to make it as matrix (in list). I mean the result something like

[[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

[[3]]

[,1] [,2] [,3] [,4] [,5]
[1,] 3 8 13 18 -1
[2,] 5 10 15 20 -1

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
}

# Thanks to Jim Holtman for this trick
delete.NULLs <- function(x.list){

x.list[unlist(lapply(x.list, length) != 0)] }

R-help@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. Received on Wed Aug 30 00:52:39 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Wed 30 Aug 2006 - 04:25:58 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.