[R] Functional pattern-matching in R

Duncan Murdoch murdoch at stats.uwo.ca
Wed Oct 29 23:13:02 CET 2008


On 29/10/2008 4:39 PM, Alexy Khrabrov wrote:
> I found there's a very good functional set of operations in R, such as  
> apply family, Hadley Wickham's lovely plyr, etc.  There's even a  
> Reduce (a.k.a. fold).  Now I wonder how can we do pattern-matching?
> 
> E.g., now I split dimensions like this:
> 
> 	m <- dim(V)[1] # R
> 	n <- dim(V)[2]  # still R
> 
> While even Matlab allows for
> 
> [m,n] = size(V) % MATLAB!
> 
> Ideally I'd be able to say,
> 
> <<x,y>> <- dim(V)
> 
> -- where <<.,.>> is some magic needed.
> 
> Similarly, to break lists, we'd need, in a MLish notation,
> 
> match L with
> | head::tail => ...
> | () => ;
> 
> What can be done in R now to simulate it, and/or how Rish is it to add  
> something like that?

You can do this:

names <- c("m", "n")
for (i in seq_along(names)) assign(names[i], dim(V)[i])

With some trickery, I think you could write a function that did this 
based on syntax like

_(m, n) <- dim(V)

I would call this quite non-Rish.  It needs tricky evaluation (m and n 
are only there as names, not as bindings to objects).

I don't know ML, so I don't understand your second example.

Duncan Murdoch



More information about the R-help mailing list