> > In pqR (see pqR-project.org), I have implemented ! and !! as binary > > string concatenation operators, equivalent to paste0 and paste, > > respectively. > > > > For instance, > > > > > "hello" ! "world" > > [1] "helloworld" > > > "hello" !! "world" > > [1] "hello world" > > > "hello" !! 1:4 > > [1] "hello 1" "hello 2" "hello 3" "hello 4" > > I'm curious about the details: > > Would `1 ! 2` convert both to strings?
They're equivalent to paste0 and paste, so 1 ! 2 produces "12", just like paste0(1,2) does. Of course, they wouldn't have to be exactly equivalent to paste0 and paste - one could impose stricter requirements if that seemed better for error detection. Off hand, though, I think automatically converting is more in keeping with the rest of R. Explicitly converting with as.character could be tedious. I suppose disallowing logical arguments might make sense to guard against typos where ! was meant to be the unary-not operator, but ended up being a binary operator, after some sort of typo. I doubt that this would be a common error, though. (Note that there's no ambiguity when there are no typos, except that when negation is involved a space may be needed - so, for example, "x" ! !TRUE is "xFALSE", but "x"!!TRUE is "x TRUE". Existing uses of double negation are still fine - eg, a <- !!TRUE still sets a to TRUE. Parsing of operators is greedy, so "x"!!!TRUE is "x FALSE", not "xTRUE".) > Where does the binary ! fit in the operator priority? E.g. how is > > a ! b > c > > parsed? As (a ! b) > c. Their precedence is between that of + and - and that of < and >. So "x" ! 1+2 evalates to "x3" and "x" ! 1+2 < "x4" is TRUE. (Actually, pqR also has a .. operator that fixes the problems with generating sequences with the : operator, and it has precedence lower than + and - and higher than ! and !!, but that's not relevant if you don't have the .. operator.) Radford Neal ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel