[R] Remove specific rows from nested list of matrices
MacQueen, Don
m@cqueen1 @end|ng |rom ||n|@gov
Fri Nov 2 20:53:05 CET 2018
It appears that at the bottom of the nesting, so to speak, you have a character matrix.
That is, the contents of the [[1]][[1]][[1]] element is a character matrix that, according to the row and column labels, has 4 rows and 5 columns.
However, the matrix itself, as printed, has, apparently, 4 column in row one, not 5 -- and five quote marks in row 4, so the number of columns is ambiguous (quote marks have to be balanced).
None the less, assuming you really do have character matrices that you're trying to modify, I'd be inclined to take a brute force approach.
I would also use for() loops instead of lapply(), because the code will be easier to follow.
Do you know, or can you assume, the maximum depth of nesting? Let's say it's three.
Here's an outline. I can't test it without an actual object to work on, and it probably has some details wrong. My intent is to present the concept.
(I believe I have the 'next' statements in the right place...)
for (i1 in length(FF)) {
## the "1" in "ff1" means first level of nesting, not first element of the list
ff1 <- FF[[i1]]
if ( !is.list(ff1) ) {
## the current element is not nested list
{apply the function that removes the appropriate rows}
## this 'next' statement is supposed to move us to the 2nd element of FF
next
} else {
## the current element (of FF) is a list, therefore, have to loop through its elements
for (i2 in length(ff1)) {
ff2 <- ff1[[i2]]
if ( !is.list(ff2) ) {
## the current element is not a nested list
{apply the removal function}
next
} else {
## the current element is a nested list
for (i3 in length(ff2) {
## if I've kept track correctly, we're now looking at the third level down of nesting,
## and if that's the max depth, we don't have to go any further
---- etc, and close all the loops ---
This brute force approach consists of nested for() loops.
The outer loop is for the top level list.
The next nested loop is for the second level lists, within each element of the top level
The next nested loop is for the third level lists, within each second level element
Since not all elements are nested to the same depth, it has to be noticed when a non-list element is reached. That element gets modified and that level is done; move up to the previous level and continue to its next element.
At least, that's an approach that I think can work, but getting all the details correct will take some work.
--
Don MacQueen
Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062
Lab cell 925-724-7509
On 11/2/18, 8:00 AM, "R-help on behalf of Ek Esawi" <r-help-bounces using r-project.org on behalf of 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.
More information about the R-help
mailing list