R поднабор списка объектов в глобальной среде по классам - PullRequest
1 голос
/ 05 марта 2012

Я бы хотел иметь возможность подмножества списка объектов в моей Глобальной среде по классам.

, т. Е. Из списка, созданного при запуске

ls ()

Я хотел бы иметь возможность составить более короткий список, в котором есть только имена объектов, принадлежащих определенному классу, например, xts или POSIXlt

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

Это небольшой поворот к вышесказанному, который использует inherits для проверки объекта:

objs =  mget(ls(envir=.GlobalEnv), envir=.GlobalEnv)
names(Filter(function(i) inherits(i, "lm"), objs))

Функция (i) наследует (i, "lm"), может быть скорректирована, как вы хотите.

2 голосов
/ 05 марта 2012

Вы можете получить 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 объектов, но также , если вы ищете zoo объектов.

...