[R] How to convert "c:\a\b" to "c:/a/b"

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Jun 29 08:46:27 CEST 2005


On Wed, 29 Jun 2005, David Duffy wrote:

> I couldn't resist adding a more literal answer

This can only work for escapes which are preserved.  The parser maps
\n to a character (LF) and the deparser maps it back to \n.
This happens to be true of \a \b \f \n \r \t \v \\ but no others.

For example, \s is mapped to s, and there is no difference between \s and
s in the parsed input.

>
> unback <- function(x) {
>  chars <- unlist(strsplit(deparse(x),""))
>  chars <- chars[-c(1,length(chars))]
>  paste(gsub("\\\\","/",chars),collapse="")
> }
>
> unback("\n")

> unback("\s")
[1] "s"

Spencer Graves keeps on insisting there is a better way, but all the
solutions are to avoid sending the string to the parser, and hence
avoiding having the string directly in an R script.  This is common in 
shell scripts, which use 'here' documents to avoid 'quoting hell'.

We can do that in R too. Here are two variants I have not seen in the 
thread

test1.R:
scan("", "", allowEscapes=FALSE, n=1, quiet=TRUE)
D:\spencerg\dataPOWER\stats\Tukey\Boxplot_missing_Tukey2.txt
catIx, "\n", sep="")

R --slave --vanilla < test1.R
D:\spencerg\dataPOWER\stats\Tukey\Boxplot_missing_Tukey2.txt

(This one does not allow quoted strings.)

test2.R:
x <- readLines(stdin(), n=1)
"D:\spencerg\dataPOWER\stats\Tukey\Boxplot_missing_Tukey2.txt"
x <- gsub('^"(.*)"$', "\\1", x)
cat(x, "\n")

R --slave --vanilla < test2.R
D:\spencerg\dataPOWER\stats\Tukey\Boxplot_missing_Tukey2.txt

(This one allows surrounding quotes or not.)

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list