From spencer.graves at pdf.com  Mon Jul  4 20:08:26 2005
From: spencer.graves at pdf.com (Spencer Graves)
Date: Mon, 04 Jul 2005 11:08:26 -0700
Subject: [Rd] [R] How to convert "c:\a\b" to "c:/a/b"
In-Reply-To: <42C31B56.1070808@pdf.com>
References: <mailman.13.1119952801.1160.r-help@stat.math.ethz.ch>	<Pine.LNX.4.58.0506291257160.7756@orpheus.qimr.edu.au>
	<Pine.LNX.4.61.0506290732540.6049@gannet.stats>
	<42C31B56.1070808@pdf.com>
Message-ID: <42C97B1A.2030009@pdf.com>

ANOTHER EXAMPLE FOR "gsub"?

	  I would like to suggest that some version of Prof. Ripley's answer to 
my recent post to r-help (subject as above) be added to the "Examples" 
for "gsub":

## CAUTION:  XEmacs may hang on "readLines"
## unless submitted by itself
(x <- readLines(stdin(), n=1))
D:\spencerg\dataPOWER\stats\Tukey\Boxplot_missing_Tukey2.txt
(x <- gsub("\\\\", "/", x))

ANOTHER OPTION FOR "readLines"?

	  I don't know if this issue is sufficiently important to justify 
adding an argument to have "readLines" to change "\" to "/", but if so, 
it does not seem difficult:

readLines. <-
function (con = stdin(), n = -1, ok = TRUE,
           reverseBackSlash=FALSE)
{
     if (is.character(con)) {
         con <- file(con, "r")
         on.exit(close(con))
     }
     if(reverseBackSlash){
       dat <- .Internal(readLines(con, n, ok))
       return(gsub("\\\\", "/", dat))
     }
     .Internal(readLines(con, n, ok))
}

(x <- readLines.(stdin(), n=1, reverseBackSlash=TRUE))
D:\spencerg\dataPOWER\stats\Tukey\Boxplot_missing_Tukey2.txt

	  This has been tested (in this one example) under XEmacs / ESS and 
Rgui for R 2.1.1 patched.

	  Thanks for your great support of the R project and through that 
making it much easier for people to learn and use improved statistical 
methods and to advance the science even further.

	  Best Wishes, 	
	  spencer graves

Spencer Graves wrote:

> Thank You, Prof. Ripley!
> 
>       Both "test1.R" and "test2.R" worked for me just now, as did the 
> following minor modification:
> 
> (x <- readLines(stdin(), n=1))
> D:\spencerg\dataPOWER\stats\Tukey\Boxplot_missing_Tukey2.txt
> 
>       Thanks again.
> 
>       spencer graves
> 
> Prof Brian Ripley wrote:
> 
>> 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.)
>>
> 

-- 
Spencer Graves, PhD
Senior Development Engineer
PDF Solutions, Inc.
333 West San Carlos Street Suite 700
San Jose, CA 95110, USA

spencer.graves at pdf.com
www.pdf.com <http://www.pdf.com>
Tel:  408-938-4420
Fax: 408-280-7915



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