5 ms·
Snippets of code for things you do all the time in R
- hessenwolf 16y agoThis would be nice an format with short functions that could be upvoted (like hacker news comments). Three shortcuts is a rather limited start.
- revorad 16y agoshameless plug: My book R Graph Cookbook is out soon - https://www.packtpub.com/r-graph-cookbook/book 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 16y agoInteresting - 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 16y agoSample 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 16y agoClearly more a comment for an R forum, but why the hell does anybody bother using '<-' instead of '='? Are you trying to obfuscate?
- ltjohnson 16y agoUsing '<-' 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/assignOps.html http://stat.ethz.ch/R-manual/R-patched/library/base/html/ass... [2] http://www.burns-stat.com/pages/Tutor/R_inferno.pdf http://www.burns-stat.com/pages/Tutor/R_inferno.pdf edit: clarified statement. edit: added examples.
- hessenwolf 16y agoI 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 16y agoI'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 16y agoMy 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 16y agoYou 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 16y agoAh - 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.
- phuff 16y agoMy understanding has always been that <- is the way that S did it, so that's the way R originally did it but = is almost always equivalent. I haven't found a place in my modest R hacking yet that = hasn't worked the way I expected it to...
- hessenwolf 16y agoAnd I haven't found anything in my ten years of using R in statistical analysis where '=' didn't work either. I've written a lot of R code. A hedge process on €2bn is being monitored with '=' signs as we speak. Dastardly.