Programación funcional en R: Filter

Quienes acudan a Mieres la semana que viene me oirán hablar de programación funcional en R. Algo de lo que no hablaré pero que dejaré acá escrito como abrebocas es un pequeño ejemplo de cómo la programación funcional hace tu vida más simple y, sobre todo, prolonga la vida de tu teclado.

Voy a ilustrar el uso de una función de R que echábamos de menos los usuarios de Python: Filter. Estaba ahí, sí, pero como escondida.

El ejemplo proviene de un intercambio de correos en las listas de R acerca de un truco estúpido: cómo crear una función parecida a ls() que mostrase sólo los objetos de una determinada frase. Se propuso

getclass <- function( cls = "data.frame" ) ls(envir=.GlobalEnv)[
                sapply(
                    sapply(ls(envir=.GlobalEnv), function(x) class(get(x)) ),
                    function(y) cls %in% y)   ]

Usando la función Filter podemos hacer lo mismo mucho más sucintamente:

getclass <- function( cls = "data.frame" )
    Filter( function( x ) cls %in% class( get( x ) ),
                ls( envir=.GlobalEnv ) )

Los interesados ya saben qué hacer hoy: ?Filter