[R] Remove specific rows from nested list of matrices

William Dunlap wdun|@p @end|ng |rom t|bco@com
Fri Nov 2 19:15:24 CET 2018


Since you cannot show the data you have have to learn some R debugging
techniques.

Here is some data that look something like yours and I want to delete rows
of character
matrices whose first entry starts with a space.

  FF <- lapply(1:2,function(i)lapply(1:3, function(j) lapply(1:2,
function(k) if (identical(c(i,j,k), c(2L,3L,1L))) c(" X", "YZ") else
rbind(c("A", "BC", "DE"), c(" P", "QR", "ST")))))
  G <- lapply(FF, function(x) lapply(x, function (y) lapply(y, function(z)
z[grepl("^ ", z[,1]),])))
  #Error in z[, 1] : incorrect number of dimensions

If you don't recognize the problem right away, try setting
  options(error=recover)
which lets you look at objects and evaluate expressions at the time of the
error.   Look at ?recover for details.

  G <- lapply(FF, function(x) lapply(x, function (y) lapply(y, function(z)
z[grepl("^ ", z[,1]),])))
  #Error in z[, 1] : incorrect number of dimensions
  #
  #Enter a frame number, or 0 to exit
  #
  #1: lapply(FF, function(x) lapply(x, function(y) lapply(y, function(z)
z[grepl(
  #2: FUN(X[[i]], ...)
  #3: #1: lapply(x, function(y) lapply(y, function(z) z[grepl("^ ", z[,
1]), ]))
  #4: FUN(X[[i]], ...)
  #5: #1: lapply(y, function(z) z[grepl("^ ", z[, 1]), ])
  #6: FUN(X[[i]], ...)
  #7: #1: grepl("^ ", z[, 1])
  #
  Selection: 6
  #Called from: eval(substitute(browser(skipCalls = skip), list(skip = 7 -
which)),
  #  envir = sys.frame(which))
  #Browse[1]> objects()
  #[1] "z"
  #Browse[1]> str(z)
  # chr [1:2] " X" "YZ"
  #Browse[1]> str(z[,1])
  #Error during wrapup: incorrect number of dimensions
  #Browse[1]>

My guess is that your list includes a mix of matrices and vectors, perhaps
from not using drop=FALSE when you subscripted them earlier.  Add drop=FALSE
to all your calls to "[" when using matrices.






Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, Nov 2, 2018 at 10:50 AM, Ek Esawi <esawiek using gmail.com> wrote:

> Thank you Jeff and Bert. I know i have to use dput add  provide a
> reproducible example. The problem is that the output,is huge, has many
> nested lists, and the info is private.
>
> Here is the first line of dput(FF) if it helps:
> dput(FF)
> list(list(list(structure(c("12/30 12/30", "01/02 01/02", "01/02 01/02",
>
> Thanks again--EK
> On Fri, Nov 2, 2018 at 11:21 AM Jeff Newmiller <jdnewmil using dcn.davis.ca.us>
> wrote:
> >
> > Can you supply the output of
> >
> > dput(FF)
> >
> > ?
> >
> > On November 2, 2018 8:00:08 AM PDT, Ek Esawi <esawiek using gmail.com> wrote:
> > >Hi All,
> > >
> > >I have a list that is made up of nested lists, as shown below. I want
> > >to remove all rows in each sub-list that start with an empty space,
> > >that’s the first entry of a row is blank; for example, on
> > >[[1]][[1]][[1]] Remove row 4,on [[1]][[1]][[3]] remove row 5, on
> > >[[1]][[2]][[1]] remove row 6, etc.. All rows start with 2 digits/ 2
> > >digits. My formula works on individual sublist but not the whole
> > >list.. I know my indexing is wrong, but don’t know how to fix it.
> > >
> > >
> > >> FF
> > >
> > >[[1]]
> > >[[1]][[1]]
> > >[[1]][[1]][[1]]
> > >[,1]    [,2]   [,3]    [,4] [,5]
> > >[1,] "30/20"   "AAAAAAAA" “    “   "-89"
> > >[2,] "02/20"   "AAAAAAAA” “    “   "-98"
> > >[3,] "02/20"   “AAAAAAA” “    “   "-84"
> > >[4,] “  “ “  “   “
> > >[[1]][[1]][[2]]
> > >[,1]    [,2]
> > >[1,] "02/23" “AAAAAAAA” : 29" “
> > >[2,] "02/23" “AAAAAAAA” ." “
> > >[3,] "02/23" “AAAAAAAA” " “
> > >[4,] "02/23" “AAAAAAAA” "
> > >[[1]][[1]][[3]]
> > >[,1]    [,2]    [,3] [,4] [,5] [,6] [,7]
> > >[1,] "01/09" “AAAAAAAA"    “   “   “   "53"
> > >[2,] "01/09" “AAAAAAAA” "   “   “   “   "403"
> > >[3,] "01/09" “AAAAAAAA” "   “   “   “   "83"
> > >[4,] "01/09" “AAAAAAAA” "   “   “   “   "783"
> > >[5,] “  “  “AAAAAAAA”  3042742181"   “   “   “   “
> > >[[1]][[2]]
> > >[[1]][[2]][[1]]
> > >[,1]  [,2] [,3] [,4] [,5]
> > >[1,] “    “   “   “   “AAAAAAAA” "
> > >[2,] "Standard Purchases"  “   “   “   "
> > >[3,] "24/90 "AAAAAAAA” “   "243"  "
> > >[4,] "24/90 "AAAAAAAA” "   "143"  "
> > >[5,] "24/91 "AAAAAAAA” " “   "143" “
> > >[6,] “    “   “   “   "792"
> > >[[1]][[2]][[2]]
> > >[,1]    [,2]
> > >[1,] "02/23" “AAAAAAAA”: 31" “
> > >[2,] "02/23" “AAAAAAAA”." “
> > >[3,] "02/23" “AAAAAAAA” " “
> > >[4,] "02/23" “AAAAAAAA”
> > >[5,] "02/23" “AAAAAAAA”
> > >[6,] "02/23" “AAAAAAAA” 20"
> > >[7,] "02/23" “AAAAAAAA”  “
> > >[8,] "02/23" “AAAAAAAA” "33"
> > >[[1]][[3]]
> > >[[1]][[3]][[1]]
> > >[,1]    [,2]
> > >[1,] "02/23" “AAAAAAAA”: 28" “
> > >[2,] "02/23" “AAAAAAAA”." “
> > >[3,] "02/23" “AAAAAAAA” " “
> > >[4,] "02/23" “AAAAAAAA” "
> > >[[1]][[3]][[2]]
> > >[,1]    [,2]    [,3]    [,4] [,5] [,6] [,7]    [,8]    [,9]
> > >[1,] "02/23" “AAAAAAAA” " “   “   "53" "
> > >[2,] "02/24" “AAAAAAAA” " “   “   "
> > >[3,] “  “  “  “   “   “   “  “  "1,241"
> > >[4,] "02/24" "AAAAAAAA”  “   "33”
> > >
> > >My Formula,:
> > >
> > >G <- lapply(FF, function(x) lapply(x, function (y) lapply(y,
> > >function(z)  z[grepl("^[0-9][0-9]/",z[,1]),])))
> > >
> > >The error: Error in z[, 1] : incorrect number of dimensions
> > >
> > >
> > >
> > >Thanks in advance--EK
> > >
> > >______________________________________________
> > >R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > >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.
> >
> > --
> > Sent from my phone. Please excuse my brevity.
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

	[[alternative HTML version deleted]]




More information about the R-help mailing list