假设您正在使用大型工作环境,并且您不擅长跟上环境变量,或者您有一些自动生成大量对象的流程。有没有办法扫描你的ls()
以识别具有给定类的所有对象?请考虑以下简单示例:
#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)
答案 0 :(得分:13)
使用class
功能:
Models <- Filter( function(x) 'lm' %in% class( get(x) ), ls() )
lapply( Models, function(x) plot( get(x) ) )
(稍微修改以处理对象可以有多个类的情况,正如@Gabor在评论中指出的那样)。
的更新强> 的。为了完整起见,以下是@ Gabor在下面的评论中提出的改进。有时我们可能只想获得X类但不类Y的对象。或者也许是其他组合。为此,可以编写一个包含所有类过滤逻辑的ClassFilter()
函数,例如:
ClassFilter <- function(x) inherits(get(x), 'lm' ) & !inherits(get(x), 'glm' )
然后你得到你想要的对象:
Objs <- Filter( ClassFilter, ls() )
现在您可以按照您想要的方式处理Objs
。