Yuchen Luo
2007-Jun-23 10:09 UTC
[R] Setting up a blank table with column names in the hard drive
Dear Friends. Greetings! This should be a very common operation and I believe there should be a nice way in R to handle it. I couldn't find it in the manual or by searching on line. I am wondering if I could ask for some help in this community. I am trying to record the results of my program to a csv file in the hard drive so as to save memory space and also to read the results in excel after running the program. Every loop of my program will result in a list with element belonging to different class. For example, things like a1 <- list(name="Fred", wife="Mary", no.children=3) a2 <- list(name="Tom", wife="Joy", no.children=9) a3 <- list(name="Paul", wife="Alic", no.children=5) I want the columns to have titles, in the example above, I want to see the title "name", "wife" and "no.children" in the excel file. To set up the table in the csv file, I need to add at least one row in the table up front. How ever, I do not have the first loop of the program completed yet at that time. If I add a row that is meaningless, how may I delete it after all the loops are completed and all the meaningful rows are added to the table? Best Wishes Yuchen Luo [[alternative HTML version deleted]]
Duncan Murdoch
2007-Jun-23 10:40 UTC
[R] Setting up a blank table with column names in the hard drive
Yuchen Luo wrote:> Dear Friends. > Greetings! > > This should be a very common operation and I believe there should be a nice > way in R to handle it. I couldn't find it in the manual or by searching on > line. I am wondering if I could ask for some help in this community. > > > > I am trying to record the results of my program to a csv file in the hard > drive so as to save memory space and also to read the results in excel after > running the program. Every loop of my program will result in a list with > element belonging to different class. For example, things like > > > > a1 <- list(name="Fred", wife="Mary", no.children=3) > a2 <- list(name="Tom", wife="Joy", no.children=9) > a3 <- list(name="Paul", wife="Alic", no.children=5) > > > > I want the columns to have titles, in the example above, I want to see the > title "name", "wife" and "no.children" in the excel file. > > > > To set up the table in the csv file, I need to add at least one row in the > table up front. How ever, I do not have the first loop of the program > completed yet at that time. If I add a row that is meaningless, how may I > delete it after all the loops are completed and all the meaningful rows are > added to the table? > >I'd use data frames rather than plain lists for the results, so write.csv will work. Create a data frame with 0 rows, and write it out: this will give you your header line. e.g. blank <- data.frame(name=character(0), wife=character(0), no.children=numeric(0)) write.csv(blank, 'file.csv') Now you can rbind new lines onto the data frame as you calculate new records and rewrite the whole thing, or just append them to the file with append=TRUE and writing with col.names=FALSE. Duncan Murdoch
Dieter Menne
2007-Jun-23 11:08 UTC
[R] Setting up a blank table with column names in the hard drive
Yuchen Luo <realityrandom <at> gmail.com> writes:> This should be a very common operation and I believe there should be a nice > way in R to handle it. I couldn't find it in the manual or by searching on > line. I am wondering if I could ask for some help in this community. > > I am trying to record the results of my program to a csv file in the hard > drive so as to save memory space and also to read the results in excel after > running the program. Every loop of my program will result in a list with > element belonging to different class. For example, things like > > a1 <- list(name="Fred", wife="Mary", no.children=3) > a2 <- list(name="Tom", wife="Joy", no.children=9) > a3 <- list(name="Paul", wife="Alic", no.children=5) > > I want the columns to have titles, in the example above, I want to see the > title "name", "wife" and "no.children" in the excel file..... Use a data frame to do the work, and save it with write.table or write.csv maxallocate=10 # we assume no more than 10 members myfamily = data.frame(name=rep(NA,maxallocate),wife=NA,nchildren=NA) myfamily[1,]=c("Fred","Ginger",3) myfamily[2,]=c("Charles","Mary",1) myfamily[4,]=c("Frank","Salsa",4) myfamily$name[3]="Anton" myfamily$wife[3]="Sue" myfamily$name[10] = "Charly" myfamily$name[8] = "Fuhrman" myfamily= myfamily[-1,] # delete first row myfamily= myfamily[-1,] # delete current first row, i.e. Charles # cleanup: assume that all entries having a name are valid myfamily = myfamily[!is.na(myfamily$name),] # oops .. I forgot .. another family member turned up unexpectedly #Add it explicitely rbind(myfamily,c("Tango","Tanga",33)) # The easy part. Check write.table for other options write.csv(myfamily,file="myfamily.csv",row.names=FALSE)
Duncan Murdoch
2007-Jun-24 11:14 UTC
[R] Setting up a blank table with column names in the hard drive
On 23/06/2007 7:51 PM, Yuchen Luo wrote:> Dear Professor Murdoch. > Thank you so much! Your help is highly appreciated!Please send replies to the mailing list.> > When I use the following commands, there is a blank cell before title "name" > in the resulting csv (excel) file. I am wondering how to get rid of it? I > want to get rid of it because when I write subsequent rows to the file, the > "name" part start from the beginning which is not aligned with the first > line of the column titles.That's a place holder for the row names. If you don't want it, specify row.names=FALSE (and do the same when you write subsequent lines). Duncan Murdoch> > " blank <- data.frame(name=character(0), wife=character(0), > no.children=numeric(0)) > write.csv(blank, 'file.csv')" > > Thank you for your help again and your time is highly appreciated! > > Best Wishes > Yuchen Luo > I > > > On 6/23/07, Duncan Murdoch <murdoch at stats.uwo.ca> wrote: >> Yuchen Luo wrote: >>> Dear Friends. >>> Greetings! >>> >>> This should be a very common operation and I believe there should be a >> nice >>> way in R to handle it. I couldn't find it in the manual or by searching >> on >>> line. I am wondering if I could ask for some help in this community. >>> >>> >>> >>> I am trying to record the results of my program to a csv file in the >> hard >>> drive so as to save memory space and also to read the results in excel >> after >>> running the program. Every loop of my program will result in a list >> with >>> element belonging to different class. For example, things like >>> >>> >>> >>> a1 <- list(name="Fred", wife="Mary", no.children=3) >>> a2 <- list(name="Tom", wife="Joy", no.children=9) >>> a3 <- list(name="Paul", wife="Alic", no.children=5) >>> >>> >>> >>> I want the columns to have titles, in the example above, I want to see >> the >>> title "name", "wife" and "no.children" in the excel file. >>> >>> >>> >>> To set up the table in the csv file, I need to add at least one row in >> the >>> table up front. How ever, I do not have the first loop of the program >>> completed yet at that time. If I add a row that is meaningless, how may >> I >>> delete it after all the loops are completed and all the meaningful rows >> are >>> added to the table? >>> >>> >> I'd use data frames rather than plain lists for the results, so >> write.csv will work. >> >> Create a data frame with 0 rows, and write it out: this will give you >> your header line. >> >> e.g. >> >> >> >> Now you can rbind new lines onto the data frame as you calculate new >> records and rewrite the whole thing, or just append them to the file >> with append=TRUE and writing with col.names=FALSE. >> >> Duncan Murdoch >> >> >