[Rd] Vectorized switch

From: Stavros Macrakis <macrakis_at_alum.mit.edu>
Date: Fri, 18 Dec 2009 14:07:08 -0500


What is the 'idiomatic' way of writing a vectorized switch statement?

That is, I would like to write, e.g.,

         vswitch( c('a','x','b','a'),
                      a= 1:4,
                      b=11:14,
                      100 )

=> c(1, 100, 13, 4 )

equivalent to

        ifelse( c('a','x','b','a') == 'a', 1:4,
                   ifelse( c('a','x','b','a') == 'b', 11:14,
                              100 ) )

A simple way of doing this is (leaving aside the default case):

       colchoose <- function(frame,selector)
           mapply(function(a,b)frame[a,b],seq_along(frame[1]),selector))

      colchoose( data.frame(a=1:4,b=11:14), c('a','b','b','a'))
           => c(1,11,11,1)

But of course this is not very efficient compared to the way ifelse works.

Is there a standard function or idiom for this (am I missing something obvious?), or should I write my own?

             -s

        [[alternative HTML version deleted]]



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Fri 18 Dec 2009 - 19:10:15 GMT

This archive was generated by hypermail 2.2.0 : Fri 18 Dec 2009 - 20:01:10 GMT