2012-04-06 2 views
2

일부 패키지의 경우 특수 유형의 객체를 볼 수 있습니다. 예를 들어 패키지에서 데이터 세트를 인쇄하려고하면 다음 메시지가 표시됩니다. 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 

multitrait

나는 우리가 같은 객체를 생성하는 방법을 궁금해 (multitrait)

[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 

은 (mycomplexobject) 특별한 목적을 확인하고 "와 같은 대신 메시지 전체 목록을 인쇄 방지하는 방법은

[1] "list" "vector" 

있는가 그것은 인쇄하기 복잡하고 대신 요약을 제공합니까?

+0

당신은 CrossValidated에 R 이상에 대한 좋은 반응을 얻을 수 있습니다 - http://stats.stackexchange.com – arboc7

+0

@ arboc7는,이되지 통계 R 사용에 대한 R 프로그래밍에 대한 질문입니다. 여기에 속해 있습니다. –

답변

6

개체의 class을 설정하고 print 방법을 제공하면됩니다.

class(mycomplexobject) <- c("too_complex", class(mycomplexobject)) 
print.too_complex <- function(x) { 
    cat("Complex object of length", length(x), "\n") 
} 
mycomplexobject 
+0

오, 좋은 ... 고마워 ... 내가 str 이러한 객체를 볼 수있는 "attr (*,"class ") = chr [1 : 2]"riself ""cross "" ?? – jon

+1

'class'는 속성 (즉, 메타 데이터) 일뿐입니다. 개체에 연결할 수 있습니다. 'print' 나'plot'과 같은 일부 메서드는 입니다. 즉, 첫 번째 인수의 형식에 따라 다릅니다. 'methods (print) '또는'methods (plot)'를 확인할 수 있습니다. 'class' 애트리뷰트는 객체가 속한 모든 클래스를 포함합니다 (예 : )이 예제에서 객체의 클래스는'riself' (파생 클래스) 이고'cross' (부모 클래스)입니다. . 당신이 그것을 인쇄 할 때, R 은 'print.riself','print.cross','print.default' 을 찾고 존재하는 첫 번째 것을 사용합니다. –