Skip to content

Vectorize 'eol' characters

3 messages · David Winsemius, Stefano Conti

#
Dear David,

My ultimate purpose is to generate a text file encoding a LaTeX table for later inclusion in a report; while I'm aware of, and familiar with, Sweave, such table would feature _some_ whole or partial crossing horizontal lines (\hline or \cline with varying arguments, which need to be placed after the tabular end-line mark '\\'), making it amenable to neither Sweave (at least as I understand it) nor similar R functions (like Frank Harrel's latex command).

Hence why I'd be bothering with differentiating end-of-line characters: ideally I require in my write.table statement the options sep="\t&\t" and eol="\\\\\n", yet with more flexibility after the LaTeX newline command '\\'.

In the meantime I've managed to resolve my problem, albeit not as elegantly as I'd initially wished: I've replaced the last column of my original R matrix with an edited (through appropriate use of the paste function) version, which now incorporates all correct end-of-line strings, and then dumped to file via write.table with quote=FALSE, sep="\t&\t" and eol="\n".

I'd be happy to stick with the above fix so long as I'm still missing some better solution.  With many thanks for the pointers so far, all the best,


--
Dr Stefano Conti
Statistics Unit (room #2A19)
Health Protection Services
HPA Colindale
61 Colindale Avenue
London NW9 5EQ, UK
tel: +44 (0)208-3277825
fax: +44 (0)208-2007868



-----Original Message-----
From: Comcast [mailto:dwinsemius at comcast.net]
Sent: Tue 01/11/2011 01:05
To: Stefano Conti
Cc: Prof Brian Ripley; r-help at r-project.org
Subject: Re: [R] Vectorize 'eol' characters
On Oct 31, 2011, at 2:01 PM, "Stefano Conti" <Stefano.Conti at hpa.org.uk> wrote:

            
Sometimes it would help to answer the question, "why bother?"

I can imagine and have have even tested as a concept the possibility of intercepting the output of capture.output(write.table(...)) so that the last separator could be removed. Before posting any code I would like to see if the effort would be on target and worth the further effort. What separator are you thinking would be used and how complex is this rolling eol???

(it's a bit like an actor saying to the director ... What's my motivation?)
#
On Nov 1, 2011, at 5:18 AM, Stefano Conti wrote:

            
(Sounds like what I arrived at.)
Here is what I cobbled together to as a work-around to get rid of the  
separator before your pseudo-EOL. Seems that some parts of it might  
apply in your situation, but I'm not sure it's any better than what  
you have constructed. Perhaps it will give you further ideas about how  
to encapsulate behaviors you desire in a function:

# Take a dataframe:

dfrm <- data.frame(a=rnorm(5), b=rnorm(5), cc =paste("tt", 1:5) )

# You can remove the last separator (in this example a comma) before the
# varying "eol string" (in this example "tt") as long as it is unique  
on each line.

sub(',tt', 'tt', capture.output(write.table(dfrm , file="", sep=",",  
quote=FALSE)) )

# Then this can be written to file with:

mod.df <- sub(',tt', 'tt', capture.output(
                        write.table(dfrm , file="", sep=",",
                                     col.names=FALSE, quote=FALSE)) )
writeLines(mod.df, con=file("test.txt") )

(It will still have a regular "eol" == "\n" unless you change that it  
the writeLines call.)
#
Dear David,

Thank you for your follow-up and extra-suggestion.

Your additional stab at my problem indeed looks like it'd work too; as I previously wrote, I had already devised a work-around but was nonetheless left wondering whether a more elegant and compact solution was still escaping my knowledge.

Thank you as well to all R-helpers who've provided me with feedback and insights; all the best,


--
Dr Stefano Conti
Statistics Unit (room #2A19)
Health Protection Services
HPA Colindale
61 Colindale Avenue
London NW9 5EQ, UK
tel: +44 (0)208-3277825
fax: +44 (0)208-2007868



-----Original Message-----
From: David Winsemius [mailto:dwinsemius at comcast.net]
Sent: Tue 01/11/2011 16:27
To: Stefano Conti
Cc: Prof Brian Ripley; r-help at r-project.org
Subject: Re: [R] Vectorize 'eol' characters
On Nov 1, 2011, at 5:18 AM, Stefano Conti wrote:

            
(Sounds like what I arrived at.)
Here is what I cobbled together to as a work-around to get rid of the  
separator before your pseudo-EOL. Seems that some parts of it might  
apply in your situation, but I'm not sure it's any better than what  
you have constructed. Perhaps it will give you further ideas about how  
to encapsulate behaviors you desire in a function:

# Take a dataframe:

dfrm <- data.frame(a=rnorm(5), b=rnorm(5), cc =paste("tt", 1:5) )

# You can remove the last separator (in this example a comma) before the
# varying "eol string" (in this example "tt") as long as it is unique  
on each line.

sub(',tt', 'tt', capture.output(write.table(dfrm , file="", sep=",",  
quote=FALSE)) )

# Then this can be written to file with:

mod.df <- sub(',tt', 'tt', capture.output(
                        write.table(dfrm , file="", sep=",",
                                     col.names=FALSE, quote=FALSE)) )
writeLines(mod.df, con=file("test.txt") )

(It will still have a regular "eol" == "\n" unless you change that it  
the writeLines call.)