On 03/26/2010 11:36 AM, Geddes, Scott wrote:>
> Hi,
>
> I wish to NEATLY store, and later display one table per file (similar to
> capabilities of write.table()).
>
> BUT BY NEATLY I MEAN:
> 1. Column Headings right aligned with data values.
> 2. Decimal points line-up per column.
> 3. Data values padded trailing zeros per column (if not integers).
> 4. "Tricky" formats such as certain characters/dates possibly
chosen by
> the user?
>
> bla bla bla
>
> I do not care about increased memory storage but my main concern is to
> DISPLAY contents of file.
>
> what is best/quickest way to achieve this?
>
Hi Scott,
As Rolf mentioned, what you are trying to format is important. It does
sound like a data frame. A general solution is to create a matrix of
character strings by formatting each column of the data frame to your
liking and then writing that to a file. Thus you would:
1. left-pad the column names of the data frame with spaces using sprintf
for the column headings.
2. see 3.
3. This makes 2. easy, just pad out each column to the same number of
decimal places using the format function.
4. the format function will do a pretty good job here, sometimes formatC
will take up the slack.
However, for everyone else who might be reading this, I looked for a
decimal aligning function in R and couldn't find one. Something like this:
decimal.align<-function(x,dechar=".",ndec=NA) {
splitchar<-paste("[",dechar,"]",sep="")
splitlist<-strsplit(as.character(x),splitchar)
is(is.null(ndec))
ndec<-max(nchar(unlist(splitlist)[seq(2,2*length(x),by=2)]))
decs<-sprintf(paste("%-",ndec,"s",sep=""),
unlist(splitlist)[seq(2,2*length(x),by=2)])
return(paste(unlist(splitlist)[seq(1,2*length(x)-1,by=2)],
decs,sep="."))
}
Jim