

Snippets of code for things you do all the time in R - john_horton
http://4dpiecharts.com/2011/01/10/really-useful-bits-of-code-that-are-missing-from-r/

======
revorad
shameless plug: My book R Graph Cookbook is out soon -
<https://www.packtpub.com/r-graph-cookbook/book>. It contains recipes for
doing things with graphs, which can sometimes be obscure, annoying and time
consuming.

~~~
john_horton
Interesting - do you have a sample chapter you can make public?

(if there already is on the site you linked to, sorry for being obtuse).

~~~
revorad
Sample chapter coming up shortly. If you don't see it on the linked page in a
couple of days, please email me (in profile).

------
hessenwolf
This would be nice an format with short functions that could be upvoted (like
hacker news comments). Three shortcuts is a rather limited start.

------
hessenwolf
Clearly more a comment for an R forum, but why the hell does anybody bother
using '<-' instead of '='? Are you trying to obfuscate?

~~~
ltjohnson
Using '<-' is the general style of the R community. The accepted (but not
universal) practice is to use '<-' for assignment and '=' in argument passing.
This is a good idea because '<-' and '=' are not equivalent and '<-' is more
likely the operator you want. From the help page [1] _The operator ‘ <-’ can
be used anywhere, whereas the operator ‘=’ is only allowed at the top level
(e.g., in the complete expression typed at the command prompt) or as one of
the subexpressions in a braced list of expressions._ That being said, some R
community members still use '=' for assignment, but it's frowned upon. It
certainly annoys me when I see it in R code.

Simple example to show when '=' won't work but '<-' will. Pilfered from "R
Inferno" [2], which is an excellent reference for R idioms and best practices.

    
    
      system.time(vec1 <- rnorm(1000))
      mean(vec1)
      system.time(vec2 = rnorm(1000))
      mean(vec2)
    

And to demonstrate that you _need_ to use '=' for argument passing:

    
    
      x <- c(3,4,NA)
      mean(x)
      mean(x, na.rm=TRUE)
      mean(x, na.rm<-TRUE)
    

[1] Type _help('=')_ at an R prompt, or view it online:
[http://stat.ethz.ch/R-manual/R-patched/library/base/html/ass...](http://stat.ethz.ch/R-manual/R-patched/library/base/html/assignOps.html)

[2] <http://www.burns-stat.com/pages/Tutor/R_inferno.pdf>

edit: clarified statement.

edit: added examples.

~~~
hessenwolf
I am of the opposite opinion, but perhaps I can be converted.

Do you have an example of where it would be required to use '<-'? Not just
median(x <\- 10), but a use in which there no simple '=' alternative.

~~~
ltjohnson
I've added some examples to my above comment. My example is perhaps a little
closer to 'median(x <\- 10)' than you were asking for, but I think it
illustrates the point that using '=' will not always have the desired result
in places where '<-' would.

~~~
hessenwolf
My problem is that between work in work and work in startup I need to write in
about 8 languages.

This applies in all languages:

vec1 = rnorm(100)

system.time(vec1)

mean(vec1)

And, I can get my colleagues to fix it when I screw up, even though they are
not R-heads.

~~~
ltjohnson
You gotta do what you gotta do, but your example probably doesn't do what you
want in R.

    
    
      > system.time(vec1 <- rnorm(1000000))
         user  system elapsed 
        0.200   0.000   0.199 
    

My computer takes .2 seconds to generate the million random normals and assign
them to vec1.

    
    
      > vec1 = rnorm(1000000)
      > system.time(vec1)
         user  system elapsed 
            0       0       0 
     

My computer only takes 0 seconds to evaluate the existing vec1 of length one
million.

~~~
hessenwolf
Ah - sorry - I was being a bit t'ick, and didn't twig the time thing. Should I
require it, I will keep it in mind. Thank you.

