Hi Gabor, My apologies. Both solutions work just fine on large lists (n=1000, n[[i]]>=500). A memory problem on my machine caused the error and fail-to-sort. Thank you!
PS - The zoo method is slightly faster. Best, Chris Gabor Grothendieck wrote: > On 8/24/07, Christopher Marcum <[EMAIL PROTECTED]> wrote: >> Hi Gabor, >> >> Thank you. The native solution works just fine, though there is an >> interesting side effect, namely, that with very large lists the rows of >> the output become scrambled though the corresponding columns are >> correctly >> sorted. The zoo package solution does not work on large lists: there is >> an >> error: >> >> Error in order(na.last, decreasing, ...) : >> argument 1 is not a vector > > They both work on the example data. Please provide reproducible > examples to illustrate your comments if you would like a response. > >> >> Gabor Grothendieck wrote: >> > Here are two solutions. The first repeatedly uses merge and the >> > second creates a zoo object from each alph component whose time >> > index consists of the row labels and uses zoo's multiway merge to >> > merge them. >> > >> > # test data >> > m <- matrix(1:5, 5, dimnames = list(LETTERS[1:5], NULL)) >> > alph <- list(m[1:4,,drop=F], m[c(1,3,4),,drop=F], m[c(1,4,5),,drop=F]) >> > alph >> > >> > # solution 1 >> > out <- alph[[1]] >> > for(i in 2:length(alph)) { >> > out <- merge(out, alph[[i]], by = 0, all = TRUE) >> > row.names(out) <- out[[1]] >> > out <- out[-1] >> > } >> > matrix(as.matrix(out), nrow(out), dimnames=list(rownames(out),NULL)) >> > >> > # solution 2 >> > library(zoo) >> > z <- do.call(merge, lapply(alph, function(x) zoo(c(x), rownames(x)))) >> > matrix(coredata(z), nrow(z), dimnames=list(time(z),NULL)) >> > >> > >> > On 8/23/07, Christopher Marcum <[EMAIL PROTECTED]> wrote: >> >> Hello, >> >> >> >> I am sure I am not the only person with this problem. >> >> >> >> I have a list with n elements, each consisting of a single column >> matrix >> >> with different row lengths. Each row has a name ranging from A to E. >> >> Here >> >> is an example: >> >> >> >> alph[[1]] >> >> A 1 >> >> B 2 >> >> C 3 >> >> D 4 >> >> >> >> alph[[2]] >> >> A 1 >> >> C 3 >> >> D 4 >> >> >> >> alph[[3]] >> >> A 1 >> >> D 4 >> >> E 5 >> >> >> >> >> >> I would like to create a matrix from the elements in the list with n >> >> columns such that the row names are preserved and NAs are inserted >> into >> >> the cells where the uneven lists do not match up based on their row >> >> names. >> >> Here is an example of the desired output: >> >> >> >> newmatrix >> >> [,1] [,2] [,3] >> >> A 1 1 1 >> >> B 2 NA NA >> >> C 3 3 NA >> >> D 4 4 4 >> >> E NA NA 5 >> >> >> >> Any suggestions? >> >> I have tried >> >> do.call("cbind",list) >> >> I also thought I was on the right track when I tried converting each >> >> element into a vector and then running this loop (which ultimately >> >> failed): >> >> >> >> newmat<-matrix(NA,ncol=3,nrow=5) >> >> colnames(newmatrix)<-c(A:E) >> >> for(j in 1:3){ >> >> for(i in 1:5){ >> >> for(k in 1:length(list[[i]])){ >> >> if(is.na(match(colnames(newmatrix),names(alph[[i]])))[j]==TRUE){ >> >> newmatrix[i,j]<-NA} >> >> else newmatrix[i,j]<-alph[[i]][k]}}} >> >> >> >> Thanks, >> >> Chris >> >> UCI Sociology >> >> >> >> ______________________________________________ >> >> 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. >> >> >> > >> >> >> > ______________________________________________ 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.