Identificar todos los objetos de una clase dada para su posterior procesamiento

Supongamos que está trabajando con un entorno de trabajo grande y que no es bueno mantenerse al día con las variables de entorno, o tiene algún proceso que genera muchos objetos automáticamente. ¿Hay alguna manera de escanear tu ls() para identificar todos los objetos que tienen una clase determinada? Considere el siguiente ejemplo sencillo:

 #Random objects in my environment x <- rnorm(100) y <- rnorm(100) z <- rnorm(100) #I estimate some linear models for fun. lm1 <- lm(y ~ x) lm2 <- lm(y ~ z) lm3 <- lm(y ~ x + z) #Is there a programmatic way to identify all objects in my environment #that are of the "lm" class? Or really, any arbitrary class? outList <- list(lm1, lm2, lm3) #I want to look at a bunch of plots for all the lm objects in my environment. lapply(outList, plot) 

Usa la función de class :

 Models <- Filter( function(x) 'lm' %in% class( get(x) ), ls() ) lapply( Models, function(x) plot( get(x) ) ) 

(Modificado ligeramente para manejar situaciones donde los objetos pueden tener múltiples clases, como señala @Gabor en los comentarios).

Actualización . Para completar, aquí hay un refinamiento sugerido por el comentario de @Gabor a continuación. A veces podemos querer obtener solo objetos que sean de clase X pero no de clase Y. O tal vez alguna otra combinación. Para esto, se podría escribir una función ClassFilter() que contenga toda la lógica de filtro de clase, como por ejemplo:

 ClassFilter <- function(x) inherits(get(x), 'lm' ) & !inherits(get(x), 'glm' ) 

Luego obtienes los objetos que deseas:

 Objs <- Filter( ClassFilter, ls() ) 

Ahora puedes procesar los Objs forma que quieras.