Assume you are working with a large working environment and you aren’t great about keeping up with your environment variables, or you have some process that generates a lot objects automatically. Is there a way to scan your ls() to identify all objects that have a given class? Consider the following simple example:
#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)
Use the
classfunction:(Modified slightly to handle situations where objects can have multiple classes, as pointed out by @Gabor in the comments).
Update. For completeness, here is a refinement suggested by @Gabor’s comment below. Sometimes we may want to only get objects that are of class X but not class Y. Or perhaps some other combination. For this one could write a
ClassFilter()function that contains all of the class filterling logic, such as:Then you get the objects that you want:
Now you can process the
Objswhatever way you want.