R is full of things that make “real programmers” (I dislike this term) turn their noses up in disgust. One of my favorites is the dump()
function. It is…odd. I think the best way to introduce it to people is without context, because it’s just so bizarre:
x <- runif(5)
x
## [1] 0.7169493 0.1615495 0.7741029 0.4234200 0.8732784
dump("x", stdout())
## x <-
## c(0.716949315741658, 0.161549518117681, 0.774102924391627, 0.423419966362417,
## 0.873278449522331)
y <- matrix(1:30, 10)
dump("y", stdout())
## y <-
## structure(1:30, .Dim = c(10L, 3L))
That’s right; it’s actually dumping out R code that would allow you to generate the object. I have actually even found some intersting uses for this in my time developing R packages. But they are highly unusual, and generally I would recommend you rethink your strategy if you think this looks like a solution to your problems. Still, it’s pretty cool to have!
But this allows for another amusing oddity with R: you can modify R objects with a text editor inside the R terminal itself. Here’s a simple example:
x <- 1:5
vi(x)
Entering this into an R terminal will greet you with a vim editor containing the text:
1:5
Now if I change the 5 to a 6 and save/exit, back in R I see:
vi(x)
# [1] 1 2 3 4 5 6
There are also emacs()
and xemacs()
functions if you’re some kind of filthy emacs plebian. I mean, they probably work. I wouldn’t know:
$ apt-cache policy emacs
## emacs:
## Installed: (none)
## ...
Now these editor commands (vi()
, emacs()
, …) sort of work in RStudio, but not really (you just get a plain editor window). So you will have to use your terminal to really enjoy this one.
Speaking of RStudio, did you know that it has a vim mode? It’s far from a full vim session, but it’s pretty neat. You can enable it by selecting
- Tools
- Global Options
- Code Editing
- Enable vim editing mode:
Of course, there’s a nice R plugin for vim itself.