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? 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 }
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 at 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? > > 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 > } > > ______________________________________________ > 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. >
Here is a function I use a lot to do this: delete.NULLs <- function(x.list){ # delele null/empty entries in a list x.list[unlist(lapply(x.list, length) != 0)] }> delete.NULLs(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] [1,] 3 8 13 18 -1 [2,] 5 10 15 20 -1 On 8/28/06, Muhammad Subianto <msubianto at 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? > > 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 > } > > ______________________________________________ > 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve?
On this day 28/08/2006 19:20, Muhammad Subianto 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? > > 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 > } >Dear Jim Holtman and Gabor Grothendieck, Thank you both very much for the suggestions! These is exactly what I was looking for. Best wishes, Muhammad Subianto ## delete null/empty entries in a list delete.NULLs <- function(x.list){ x.list[unlist(lapply(x.list, length) != 0)] } > delete.NULLs <- function(x.list){ + x.list[unlist(lapply(x.list, length) != 0)] + } > delete.NULLs <- function(x.list){ + x.list[unlist(lapply(x.list, length) != 0)] + } > > delete.NULLs(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] [1,] 3 8 13 18 -1 [2,] 5 10 15 20 -1 >
Muhammad Subianto
2006-Aug-29 11:22 UTC
[R] Remove empty list from list - remove only one row and make as matrix
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)] }
Dimitris Rizopoulos
2006-Aug-29 11:34 UTC
[R] Remove empty list from list - remove only one row and make as matrix
try the following: # a dff[sapply(dff, is.matrix)] # b lapply(dff, function(x) if(!is.matrix(x)) rbind(x) else x) I hope it helps. Best, Dimitris ---- Dimitris Rizopoulos Ph.D. Student Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://med.kuleuven.be/biostat/ http://www.student.kuleuven.be/~m0390867/dimitris.htm ----- Original Message ----- From: "Muhammad Subianto" <msubianto at gmail.com> To: <r-help at stat.math.ethz.ch> Sent: Tuesday, August 29, 2006 1:22 PM Subject: Re: [R] Remove empty list from list - remove only one row and make as matrix> 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 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. >Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
Muhammad Subianto
2006-Aug-29 12:14 UTC
[R] Remove empty list from list - remove only one row and make as matrix
Dear all, Dimitris, thanks for your great help and quick response. Best, Muhammad Subianto > dff[sapply(dff, is.matrix)] [[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,] 3 8 13 18 -1 [2,] 5 10 15 20 -1 > lapply(dff, function(x) if(!is.matrix(x)) rbind(x) else x) [[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] x 1 6 11 16 1 [[3]] [,1] [,2] [,3] [,4] [,5] [1,] 3 8 13 18 -1 [2,] 5 10 15 20 -1 > On this day 29/08/2006 13:34, Dimitris Rizopoulos wrote:> try the following: > > # a > dff[sapply(dff, is.matrix)] > > # b > lapply(dff, function(x) if(!is.matrix(x)) rbind(x) else x) > > > I hope it helps. > > Best, > Dimitris > > ---- > Dimitris Rizopoulos > Ph.D. Student > Biostatistical Centre > School of Public Health > Catholic University of Leuven > > Address: Kapucijnenvoer 35, Leuven, Belgium > Tel: +32/(0)16/336899 > Fax: +32/(0)16/337015 > Web: http://med.kuleuven.be/biostat/ > http://www.student.kuleuven.be/~m0390867/dimitris.htm > > > ----- Original Message ----- > From: "Muhammad Subianto" <msubianto at gmail.com> > To: <r-help at stat.math.ethz.ch> > Sent: Tuesday, August 29, 2006 1:22 PM > Subject: Re: [R] Remove empty list from list - remove only one row and > make as matrix > > >> 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)] >> } >>