【问题标题】:How to create outputs in list form that aren't shown as lists & how to print only part of the result如何以列表形式创建未显示为列表的输出以及如何仅打印部分结果
【发布时间】:2012-11-02 03:46:05
【问题描述】:

许多函数的输出都以列表结构形式出现 - 例如 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

谢谢!

【问题讨论】:

标签: r list function lm


【解决方案1】:

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

查看print.lm 了解其工作原理。

> test <- list()
> class(test) <- "myclass"
> print.myclass <- function(x) cat("hi")
> test
hi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2018-11-15
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多