【问题标题】:creating special data objects in r在 r 中创建特殊数据对象
【发布时间】:2012-04-19 18:20:05
【问题描述】:

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

多特征

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"

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

【问题讨论】:

  • 您可能会在 CrossValidated 上获得关于 R over 的更好回复 -- stats.stackexchange.com
  • @arboc7,这是一个关于 R 编程的问题,而不是关于使用 R 进行统计的问题。它属于这里。

标签: r list data-binding package data-objects


【解决方案1】:

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

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

【讨论】:

  • 哦,太好了...谢谢...当我 str 此类对象时,我可以看到类似“- attr(*, "class")= chr [1:2] "riself" "cross" “,那是什么意思??
  • class 只是一个可以附加到任何对象的属性(即元数据)。一些方法,例如printplot,是通用的,即它们取决于它们的第一个参数的类型:您可以检查methods(print)methods(plot)class 属性包含对象所属的所有类(这是实现多继承的方式):在您的示例中,对象具有类riself(派生类)和cross(父类)。当您print 它时,R 将查找以下方法:print.riselfprint.crossprint.default 并使用第一个存在的方法。
猜你喜欢
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多