Instead of writing one vector subscript operation a line, such as:
x.and.y <- intersect(x, y)
idx.x <- match(x, x.and.y)
idx.x <- idx.x[!is.na(idx.x)]
I could chain them in one line:
x.and.y <- intersect(x, y)
idx.x <- subset(tmp <- match(x, x.and.y), !is.na(tmp))
In order to do that, I must give intermediate vector a name to be used in subscript operations. To make code even more concise, is there a way to refer to a vector anonymously? Like this:
x.and.y <- intersect(x, y)
idx.x <- match(x, x.and.y)[!is.na] ## illegal R
Considering
intersectcallsmatch, what you’re doing is redundant.intersectis defined as:And you can get the same result as your 3 lines of code by using
%in%:x[y%in%x].I realize this may not be representative of your actual problem, but “referring to a vector anonymously” doesn’t really fit the R paradigm. Function arguments are pass-by-value. You’re essentially saying, “I want a function to manipulate an object, but I don’t want to provide the object to the function.”
You could use R’s scoping rules to do this (which is what mplourde did using
Filterwith an anonymous function), but you’re going to create quite a bit of convoluted code that way.