在r中创建特殊数据对象

jon*_*jon 2 data-binding r list package data-objects

对于某些包,我可以看到特殊类型的对象.例如,当我尝试从包打印数据集时,我收到以下消息.

multitrait

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
Run Code Online (Sandbox Code Playgroud)

是(multitrait)

 [1] "riself"
Run Code Online (Sandbox Code Playgroud)

我想知道我们如何创造这样的对象.它们是数据帧的特殊列表,向量矩阵.

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)
Run Code Online (Sandbox Code Playgroud)

现在我的复杂对象:

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
Run Code Online (Sandbox Code Playgroud)

是(mycomplexobject)

 [1] "list"   "vector"
Run Code Online (Sandbox Code Playgroud)

是否有办法制作特殊对象并防止打印整个列表而不是像"打印复杂"并提供摘要的消息?

Vin*_*ynd 6

只需设置class对象并提供print方法即可.

class(mycomplexobject) <- c("too_complex", class(mycomplexobject))
print.too_complex <- function(x) {
  cat("Complex object of length", length(x), "\n")
}
mycomplexobject
Run Code Online (Sandbox Code Playgroud)