Mulholland, Tom wrote:
> 
>>-----Original Message-----
>>From: [EMAIL PROTECTED]
>>[mailto:[EMAIL PROTECTED] Behalf Of Henrik Bengtsson
>>Sent: Tuesday, 28 June 2005 2:54 AM
>>To: Spencer Graves
>>Cc: [email protected]; Dirk Eddelbuettel
>>Subject: Re: [R] How to convert "c:\a\b" to "c:/a/b"?
>>
> 
> ... snipped
>  
> 
>>  Thus, you cannot write your program such that it fools the parser, 
>>because your program is evaluated first after the parser.  In other 
>>words, there is no way you can get nchar("\n") to equal 2.
>>
> 
> 
> I had been waiting for this answer because it was the conclusion I had come 
> to. Given that I mainly work in a windows world this has been a problem. For 
> various reasons I receive files liberally sprinkled with such pathnames. I 
> generally pre-process them using whatever is at hand. It's not a big problem, 
> just annoying to have to explain to collegues that this is something R can't 
> do. Not a good advertisment for those who have no idea about escape codes. 

Please, note this basically only applies to source(), expressions at the 
R prompt (and unfortunately read.table()), and therefore you should not 
have to pre-process you files.  Here are some illustrating example. It 
is a good exercise to convince yourself that you understand why you get 
the different results;

code <- "x <- \"D:\\spencerg\\statmtds\\R\\Rnews\""
cat(file="foo.R", code)

file.show("foo.R")   # x <- "D:\spencerg\statmtds\R\Rnews"

x <- NA
eval(parse(text=code))
print(x)
rm(x)
[1] "D:spencergstatmtdsRRnews"

source("foo.R")
print(x)
[1] "D:spencergstatmtdsRRnews"

print(readLines("foo.R"))
[1] "x <- \"D:\\spencerg\\statmtds\\R\\Rnews\""

print(scan("foo.R", what=character(0), allowEscapes=FALSE))
[1] "x"                        "<-"
[3] "D:spencergstatmtdsRRnews"

print(read.table("foo.R"))
   V1 V2                       V3
1  x <- D:spencergstatmtdsRRnews

print(readChar("foo.R", nchar=256))
[1] "x <- \"D:\\spencerg\\statmtds\\R\\Rnews\""

 > print(readBin("foo.R", what=integer(0), size=1, n=256))
[1]  120  32  60  45  32  34  68  58  92 115 112 101 110  99 101 114 103 
  92 115
[20] 116  97 116 109 116 100 115  92  82  92  82 110 101 119 115  34


Comment/suggestion: It would be nice if read.table() would pass argument 
'allowEscapes' (or just '...') to scan().

/Henrik

> However I can't believe that this problem cannot be solved. The thoughts that 
> have come through my head are to write a c routine that effectively ignores 
> the possibility that \n means newline and thus remaps all the escape codes 
> into text (\\ and the character code.) 
> 
> I've never written in C which is one of the reasons that I have never 
> attempted this. I would be interested in any thoughts about the viability of 
> my proposal. It seems an awful lot of work (at least for someone who hasn't 
> done this sort of stuff before) for something that can be achieved in many 
> other ways.
> 
> Tom
> 
> ______________________________________________
> [email protected] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> 
>

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to