On 1/23/2011 12:15 PM, Vitalie S. wrote:
Spencer Graves<spencer.gra...@structuremonitoring.com>  writes:

On 1/23/2011 8:50 AM, peter dalgaard wrote:
On Jan 22, 2011, at 21:08 , Vitalie S. wrote:

The only definite argument occurred in the thread against "+" operator
was the lack of commutativity (as if one have to prove algebraic
theorems in R).
I think the real killer was associativity, combined with coercion rules:

Is "x"+1+2 supposed to be equal to "x12" or "x3"?

       Excellent:  This seems like a good reason to follow Python:  Allow "a+b" with a 
character vector "a" only if
"b" is also a character vector (or factor?).

       This example raises another question:  If we allow "a+b" for "a" and "b" 
both character vectors (and give an
error if one is numeric), what do we do with factors?  If "a" is a factor,
return a factor?
If we define custom %+% as:

     `%+%`<- function(a, b){
         if(is.character(a) || is.character(b))
             paste(as.character(a), as.character(b), sep="")
         else
             a + b
     }

because of higher precedence of %any% operators over binary + we have:

     "a" %+% 1 %+% 2
     ## [1] "a12"

and

    str("a" %+% factor(1:2))
    ## chr [1:2] "a1" "a2"

so if + on characters would behave "as if" having slightly higher priority than
other + operators that might solve reasonably the problem.

Vitalie.

No: 'a' %+% (1 %+%2) != ('a' %+% 1) %+% 2, as Peter Dalgaard noted: 'a3' != 'a12'.


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to