Dear all, After I work around, I found in my list of data with only one row which need to remove or make it as matrix. Here I write again my other 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 # 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 Best, Muhammad Subianto 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.