我希望能够按类对我的全局环境中的对象列表进行子集化。
即。从运行
创建的列表中ls()
我希望能够创建一个只有属于特定类的对象名称的较短列表,例如xts或POSIXlt
提前致谢
答案 0 :(得分:3)
这是对上述内容的轻微改动,它使用inherits
来检查对象:
objs = mget(ls(envir=.GlobalEnv), envir=.GlobalEnv)
names(Filter(function(i) inherits(i, "lm"), objs))
函数(i)inherits(i,“lm”)可以根据需要进行调整。
答案 1 :(得分:2)
您可以检索ls()
并检查所有内容的类别。但它可能不是特别有效,因为它在 ls()
之后过滤而不在其中。
# populate global environment with some vars.
rm(list=ls())
a <- 1
b <- 2
c <- 'foo'
d <- 'asdf'
lst <- ls()
# return everything 'numeric':
lst[sapply(lst,function(var) any(class(get(var))=='numeric'))]
# 'a' 'b'
get(var)
获取与var
中的字符串对应的变量,因此如果var
为"a"
,则get(var)
检索1(作为变量的值) a
)。
如下面的@VincentZoonekynd所述 - 对象可能有多个类。 Soo class(some_xts_object)
为c("xts","zoo")
- 如果您搜索some_xts_object
个对象,上述方法将返回xts
,如果您搜索{{>,则也 1}}对象。