[R] the less-than-minus gotcha
Greg Snow
538280 at gmail.com
Wed Feb 4 22:33:30 CET 2015
Steve (and any others still paying attention to this thread),
Larry Wall (author of Perl) said something along the lines of:
things that are similar should look similar, things that are different
should look different.
Ironically one of the first places I saw that quote was in a Perl vs.
Python language war and the same quote was being used by both sides. This
made me think that you can learn a lot about how programmers think by what
they make look similar and what they make look different (and therefore
what they think are similar and different).
In R, I see the assignments:
foo( x <- something )
as assign to the variable x in the current (or calling) environment and
foo( x = something )
as assign to the variable x in the environment created by the function call.
With this distinction only "<-" makes any sense at the top level, but then
I see assigning to the 2 different environments as 2 different things that
should look different. Using "=" for assignment makes sense if (and only
if) you consider assigning into different environments to be the same (or
at least very similar) thing.
Also you mentioned that
foo( x <- something )
should always be written as:
x <- something
foo(x)
and for many cases I agree, but consider the counter example of:
system.time( out <- longRunningSimulationFunction(n=1e6) )
compared to:
out = longRunningSimulationFunction(n=1e6)
system.time(out)
I would argue that the 1st version is much more useful than the 2nd.
On Mon, Feb 2, 2015 at 6:57 PM, 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.
>
--
Gregory (Greg) L. Snow Ph.D.
538280 at gmail.com
[[alternative HTML version deleted]]
More information about the R-help
mailing list