2015-10-23 4 views
0

Примечание. Связанный с этим вопрос не объясняет, почему attr(myVar, "class") возвращает NULL, но не list (и почему class(myVar) возвращает list). Что такое стандартный путь в R, чтобы проверить класс объекта?Как определить класс объекта

Как узнать, является ли объект «моим пользовательским классом» или «списком» объектов «моего пользовательского класса»?

foo <- function(x) { 
    a=list(x=x) 
    attr(a, "class") <- "myclass" 
    return(a) 
} 

newVar = list(foo(10),foo(20)) 

Теперь я хочу узнать, какой класс newVar.

attr(newVar, "class") # NULL, but not list! 
#NULL 

##however this works fine 
attr(newVar[[1]], "class") 
#[1] "myclass" 

Почему это так? Что такое правильно способ определения класса в R?

+1

Jut try 'class (newVar)' – akrun

+1

'class (newVar)' дает 'list'. –

+0

Возможный дубликат [Идентификация объекта R] (http://stackoverflow.com/questions/1177926/r-object-identification) –

ответ

1

«Правильный способ» для определения класса объекта S3 использует функцию class.

Неявные классы:

class(list(1)) 
#[1] "list" 
class(1:5) 
#[1] "integer" 

Явные классы:

class(list(1)) 
class(lm(Sepal.Length ~ Sepal.Width, data = iris)) 
#[1] "lm" 

x <- 1:5 
class(x) <- "myclass" 
class(x) 
#[1] "myclass" 

Поскольку список может содержать все, что вам нужно перебрать, чтобы это выяснить, классы объектов внутри нее, например, sapply(yourlist, class).

Идентификатор класса хранится как атрибут (как и имена, размеры и некоторые другие материалы), но обычно вам не нужно беспокоиться о таких внутренних компонентах, поскольку R предлагает функции доступа.

Смежные вопросы