[R] Combine lists into a data frame or append them to a text file

Ek Esawi e@@wiek @ending from gm@il@com
Sun Dec 16 19:29:30 CET 2018


I tried Jim's function and it works. But here is an example just in case.

AA <- list(a=c(1,2,3,4),b = c("a","b","c"))
BB <- list(c=c(1,2,3,4,5),d=c("a","b","c","d","e"))
mylist <- (list(AA,BB))

lapply(mylist,function(x) write.table(x,file = test.txt))
 Show Traceback

 Error in (function (..., row.names = NULL, check.rows = FALSE,
check.names = TRUE,  :
  arguments imply differing number of rows: 4, 3

On Sun, Dec 16, 2018 at 8:45 AM Ek Esawi <esawiek using gmail.com> wrote:
>
> Thank you Jim and Bert,
>
> I tried Jim's function and it works. But here is an example just in case.
>
> AA <- list(a=c(1,2,3,4),b = c("a","b","c"))
> BB <- list(c=c(1,2,3,4,5),d=c("a","b","c","d","e"))
> mylist <- (list(AA,BB))
>
> lapply(mylist,function(x) write.table(x,file = test.txt))
>  Show Traceback
>
>  Error in (function (..., row.names = NULL, check.rows = FALSE,
> check.names = TRUE,  :
>   arguments imply differing number of rows: 4, 3
>
> On Sun, Dec 16, 2018 at 1:03 AM Jim Lemon <drjimlemon using gmail.com> wrote:
> >
> > Hi Ek,
> > I thought there would be a simple fix for this, but had to write a
> > little function:
> >
> > fillList<-function(x) {
> >  maxrows<-max(unlist(lapply(x,length)))
> >  return(lapply(x,"[",1:maxrows))
> > }
> >
> > that fills up the rows of each list with NAs. I got the expected result with:
> >
> > testlist<-list(a=1:8,b=1:9,c=1:10)
> > as.data.frame(fillList(testlist))
> >
> > so:
> >
> > for (i in 1:length(MyTables)) {
> > write.table(as.data.frame(fillList(MyTables[i])),
> >  file = "Temp.txt",append = TRUE,quote = TRUE)
> >
> > may do the job.
> >
> > Jim
> >
> > On Sun, Dec 16, 2018 at 2:28 PM Ek Esawi <esawiek using gmail.com> wrote:
> > >
> > > Hi All,
> > >
> > > I have an R object that is made up of N number of lists which are all
> > > of different number of columns and rows.  I want to combine the N
> > > lists into a single data frame or write (append) them into text file.
> > > I hope the question is clear and doesn’t require an example. I am
> > > hoping to accomplish this using base R functions.
> > > Below is what I tried but both gave me the same error which I do
> > > understand, I think, but I don’t know how to fix it. My R object is
> > > MyTables
> > >
> > > lapply(MyTables, function(x) write.table(x, file = "Temp.txt",append = TRUE ))
> > > OR
> > > for (i in 1:length(MyTables)) {
> > > write.table(MyTables[i], file = "Temp.txt",append = TRUE,quote = TRUE)
> > >
> > > the error
> > > Error in (function (..., row.names = NULL, check.rows = FALSE,
> > > check.names = TRUE,  :
> > >   arguments imply differing number of rows: 51, 8, 30
> > >
> > > Thanks--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