[Rd] [R] How to convert "c:\a\b" to "c:/a/b"
Spencer Graves
spencer.graves at pdf.com
Mon Jul 4 20:08:26 CEST 2005
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
More information about the R-devel
mailing list