gpt4 book ai didi

r - 如何使用函数查看文件中的结果并*应用?

转载 作者:行者123 更新时间:2023-12-02 06:39:39 25 4
gpt4 key购买 nike

我喜欢在窗口中弹出结果,以便更容易查看和查找(例如,它们不会随着控制台继续滚动而丢失)。一种方法是使用 sink()file.show()。例如:

y <- rnorm(100); x <- rnorm(100); mod <- lm(y~x)
sink("tempSink", type="output")
summary(mod)
sink()
file.show("tempSink", delete.file=T, title="Model summary")

我通常这样做是为了检查模型拟合,如上所述,但也用于各种其他函数和对象,例如:summary(data.frame)anova(model1 , 模型 2), 表(factor1, factor2)。这些很常见,但也可能出现其他情况。这里的要点是函数和对象的性质都可以变化。

每次都把上面的都打出来有点乏味。我想写一个我可以调用的更简单的函数,像下面这样的函数会很好:

sinkShow <- function(obj, fun, title="output") {
sink("tempSink", type="output")
apply(obj, ?, fun)
sink()
file.show("tempSink", delete.file=T, title=title)
}

显然,这是行不通的。有几个问题。首先,你将如何做到这一点,这样它就不会因为错误类型的对象或函数而崩溃,而不必有一个条件执行列表(即 if(is.list(obj) { lapply... )。第二,我不确定如何处理 margin 参数。最后,即使我尝试简单的、人为的示例,我知道一切都已正确设置,这也不起作用, 因此似乎存在根本性的错误。

有谁知道如何简单轻松地处理这种情况?我不是 R 的新手,但我从未被正式教授过它;我以一种特别的方式学习技巧,也就是说,我不是一个非常老练的 R 程序员。谢谢。

最佳答案

而不是使用 apply 我认为你想要 do.call。确保将其包装在 print 中,因为它在函数内部。

这是一种可能的实现方式:

sinkShow <- function( obj, fun, title='Output', ...) {
file <- tempfile()
args <- c(list(obj),list(...))

capture.output( do.call( fun, args ), file=file )
file.show(file, delete.file=TRUE, title=title)
}

虽然它可能应该重命名,因为我也跳过了使用 sink。我可能会稍微修改一下并将其放入 TeachingDemos 包中。

关于r - 如何使用函数查看文件中的结果并*应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10502003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com