0

许多函数的输出都在列表结构中——例如 lm()。因此,您可以使用“$”或带方括号的索引来检索输出的单独部分。我的问题是如何以列表形式创建输出,而不会公开表明它是一个列表。如您所知,当在屏幕上打印列表时,通常会指示子列表名称或索引,如下所示:

L1 = list(a=1:3, b=letters[1:3])
L1

$a
[1] 1 2 3

$b
[1] "a" "b" "c"

但是,lm() 输出从不使用“$”和子列表名称显示不同的子列表 - 尽管您可以使用“$”和子列表名称提取这些子列表。

第二个问题与某些函数的输出包含的内容远比实际打印在屏幕上的内容(例如,lm() 再次)有关这一事实。如果我们将 str() 用于拟合模型,我们将在拟合模型中看到一大堆内容,其中大部分没有打印出来。这是如何实现的?该函数是否像下面那样分别打印某些内容并输出其他内容(使用 invisible())?

foo = function(x){
   result = list(data=x, test.result=t.test(x))
   print(result[[2]])
   invisible(result)
}
foo(1:10)$data

谢谢!

4

1 回答 1

2

阅读 S3 课程。具体来说,当您在提示符处键入一个对象名称时,R 会调用print,它具有不同类的方法。

看看print.lm这是如何工作的。

> test <- list()
> class(test) <- "myclass"
> print.myclass <- function(x) cat("hi")
> test
hi
于 2012-11-02T03:50:41.860 回答