[R] the less-than-minus gotcha

Martin Maechler maechler at lynne.stat.math.ethz.ch
Tue Feb 3 10:42:05 CET 2015


>>>>> Steve Taylor <steve.taylor at aut.ac.nz>
>>>>>     on Tue, 3 Feb 2015 03:11:47 +0000 writes:

    > Nobody would write x=x or indeed x<-x; both are silly.  If
    > I found myself writing f(x=x) I might smirk at the
    > coincidence, but it wouldn't bother me.  I certainly
    > wouldn't confuse it with assigning x to itself.  By the
    > way, here's another assignment operator we can use:

    > `:=` = `<-` # this is going in my .Rprofile 
    >  x := 1

I very much agree with you on that last point.

A while ago, about or shortly before when R was created, say ca. 1991-1993,
when S4 was "around the corner", and I was a beta tester for it,
and  '=' was going to be introduced into the S language, 
I had a fervent plea for considering  ":="  as an alternative...
... but was never even replied to IIRC.

The fact that R's parser allows  ':='  is an interesting
historic relict itself.
Before R even got a version number, R did not have packages yet,
there was "kind of a distinction" (don't ask me for details now)
between "base R functions" and "other R objects"
 {If Ross Ihaka reads this, he will cringe I'm sure.. sorry, Ross!}
and all those used :=

The last version that still used this extensively 0.13, is still available
as  R-0.13alpha.tar.gz  (813570 bytes, dated  Nov 7, 1996),
and contains a file src/library/base/median  (note, no 'R'
subdirectory) which looks like this
---------------------------------------------------------------------
median := function(x, na.rm = FALSE) {
	if(na.rm)
		x <- x[!is.na(x)]
	else if(any(is.na(x)))
		return(NA)
	n <- length(x)
	half <- (n + 1)/2
	if(n %% 2 == 1) {
		sort(x, partial = half)[half]
	}
	else {
		sum(sort(x, partial = c(half, half + 1))[c(half, half + 1)])/2
	}
}
---------------------------------------------------------------------

so yes, ":="  had its nice history,  but as it was not accepted
into S  *instead* of '=', it also fell away for R ...

Martin Maechler, 
ETH Zurich  (and R Core team since "prehistory")


    > -----Original Message----- From: Jeff Newmiller
    > [mailto:jdnewmil at dcn.davis.ca.us] Sent: Tuesday, 3
    > February 2015 3:54p To: Steve Taylor;
    > r-help at stat.math.ethz.ch Subject: Re: [R] the
    > less-than-minus gotcha

    > I did not start out liking <-, but I am quite attached to
    > it now, and even Rcpp feels weird to me now. This may seem
    > like yet another variation on a theme that you don't find
    > compelling, but I find that

    > f(x=x)

    > makes sense when scope is considered, but

    > x=x

    > on its own is silly. That is why I prefer to reserve = for
    > assigning parameters... I use it to clarify that I am
    > crossing scope boundaries, while <- never does. (<<- is a
    > dangerous animal, though... to be used only locally in
    > nested function definitions).

    > In my view, this is similar to preferring == from
    > C-derived syntaxes over the overloaded = from, say,
    > Basic. I am sure you can get by with the syntactic
    > overloading, but if you have the option of reducing
    > ambiguity, why not use it?

    > ---------------------------------------------------------------------------
    > Jeff Newmiller The .....  .....  Go Live...
    > DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#.  ##.#.  Live
    > Go...  Live: OO#.. Dead: OO#..  Playing Research Engineer
    > (Solar/Batteries O.O#.  #.O#.  with /Software/Embedded
    > Controllers) .OO#.  .OO#.  rocks...1k
    > --------------------------------------------------------------------------- 
    > Sent from my phone. Please excuse my brevity.

    > On February 2, 2015 5:57:05 PM PST, Steve Taylor
    > <steve.taylor at aut.ac.nz> wrote:
    >> Responding to several messages in this thread...
    >> 
    >>> > All the more reason to use = instead of <- Definitely
    >>> not!
    >> 
    >> Martin and Rolf are right, it's not a reason for that; I
    >> wrote that quickly without thinking it through.  An "="
    >> user might be more likely to fall for the gotcha, if not
    >> spacing their code nicely.  So the lesson learned from
    >> the gotcha is that it's good to space your code nicely,
    >> as others have siad, not which assignment symbol to use.
    >> 
    >> However, I continue to use "=" for assignment on a daily
    >> basis without any problems, as I have done for many
    >> years.  I remain unconvinced by any and all of these
    >> arguments against it in favour of "<-".  People telling
    >> me that I "should" use the arrow need better agruments
    >> than what I've seen so far.
    >> 
    >> I find "<-" ugly and "->" useless/pointless, whereas "="
    >> is simpler and also nicely familiar from my experience in
    >> other languages.  It doesn't matter to me that "=" is not
    >> commutative because I don't need it to be.
    >> 
    >>> Further it can be nicely marked up by a real "left
    >>> arrow" by e.g. the listings LaTeX 'listings' package...
    >> 
    >> Now that's just silly, turning R code into graphical
    >> characters that are not part of the R language.
    >> 
    >>> foo(x = y) and foo(x <- y)
    >> 
    >> I'm well aware of this distinction and it never causes me
    >> any problems.  The latter is an example of bad
    >> (obfuscated) coding, IMHO; it should be done in two lines
    >> for clarity as follows:
    >> 
    >> x = y foo(x)
    >> 
    >>> Using = has it's problems too.
    >> Same goes for apostrophes.
    >> 
    >> Shall we discuss putting "else" at the start of line
    >> next?
    >> 
    >> cheers, Steve
    >> 
    >> ______________________________________________
    >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and
    >> more, see https://stat.ethz.ch/mailman/listinfo/r-help
    >> PLEASE do read the posting guide
    >> http://www.R-project.org/posting-guide.html and provide
    >> commented, minimal, self-contained, reproducible code.

    > ______________________________________________
    > R-help at r-project.org mailing list -- To UNSUBSCRIBE and
    > more, see https://stat.ethz.ch/mailman/listinfo/r-help
    > PLEASE do read the posting guide
    > http://www.R-project.org/posting-guide.html and provide
    > commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list