создание специальных объектов данных в r

Для некоторых пакетов я вижу особый тип объектов. Например, я получаю следующее сообщение, когда пытаюсь распечатать набор данных из пакета.

мультипризнак

This is an object of class "cross".
  It is too complex to print, so we provide just this summary.
    RI strains via selfing

    No. individuals:    162

......................and other summary information

есть (мультипризнак)

 [1] "riself"

Интересно, как мы можем создать такой объект. Это специальные списки фреймов данных, матрицы векторов.

X <- c("A", "B", "C")
Y <- data.frame (A = 1:10, B = 21:30, C = 31:40)
myeq <- c("Y ~ X1 + Y1")
K <- 100
A = 1:20
B = B= 21:40
J <- as.matrix(A,B )
myl1 <- list(J, K)

Теперь мой сложный объект:

mycomplexobject <- list(X, Y, myeq, K, J, myl1) 
mycomplexobject
str(mycomplexobject)

List of 6
 $ : chr [1:3] "A" "B" "C"
 $ :'data.frame':       10 obs. of  3 variables:
  ..$ A: int [1:10] 1 2 3 4 5 6 7 8 9 10
  ..$ B: int [1:10] 21 22 23 24 25 26 27 28 29 30
  ..$ C: int [1:10] 31 32 33 34 35 36 37 38 39 40
 $ : chr "Y ~ X1 + Y1"
 $ : num 100
 $ : int [1:20, 1] 1 2 3 4 5 6 7 8 9 10 ...
 $ :List of 2
  ..$ : int [1:20, 1] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ : num 100

есть(мойкомплексобъект)

 [1] "list"   "vector"

Есть ли способ сделать специальный объект и предотвратить печать всего списка вместо сообщения типа «сложно печатать» и вместо этого предоставить сводку?


person jon    schedule 06.04.2012    source источник
comment
Вы можете получить лучшие ответы о R на CrossValidated -- stats.stackexchange.com   -  person arboc7    schedule 06.04.2012
comment
@ arboc7, это вопрос о программировании на R, а не об использовании R для статистики. Он принадлежит здесь, на SO.   -  person Brandon Bertelsen    schedule 06.04.2012


Ответы (1)


Просто установите class вашего объекта и укажите метод print.

class(mycomplexobject) <- c("too_complex", class(mycomplexobject))
print.too_complex <- function(x) {
  cat("Complex object of length", length(x), "\n")
}
mycomplexobject
person Vincent Zoonekynd    schedule 06.04.2012
comment
о, хорошо... спасибо... когда я нахожу такие объекты, я вижу что-то вроде - attr(*, class)= chr [1:2] cross , что это может означать?? - person jon; 06.04.2012
comment
class — это просто атрибут (то есть метаданные), который вы можете прикрепить к любому объекту. Некоторые методы, такие как print или plot, являются общими, т. е. они зависят от типа их первого аргумента: вы можете проверить methods(print) или methods(plot). Атрибут class содержит все классы, к которым принадлежит объект (именно так реализовано множественное наследование): в вашем примере у объекта есть классы riself (производный класс) и cross (родительский класс). Когда вы print это сделаете, R будет искать следующие методы: print.riself, print.cross, print.default и использовать первый существующий. - person Vincent Zoonekynd; 06.04.2012