2

結果をウィンドウに表示して、見やすく、見つけやすくするのが好きです(たとえば、コンソールがスクロールし続けても、結果が失われることはありません)。これを行う1つの方法は、とを使用すること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, model2)、他のさまざまな関数やオブジェクトについても行いますtable(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プログラマーではありません。ありがとう。

4

2 に答える 2

5

使うよりもapply欲しいと思いますdo.callprint関数内にあるので、必ずでラップしてください。

考えられる実装の1つは次のとおりです。

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)
}

シンクの使用もスキップしたので、おそらく名前を変更する必要がありますが。これを少し変更して、TeachingDemosパッケージに入れるかもしれません。

于 2012-05-08T18:13:54.203 に答える
4

を使用しpageます。サンプルモデルは次のとおりです。

d <- data.frame(y1=rnorm(100), y2=rnorm(100), x=rnorm(100))
mod <- lm(y1~x, data=d)
mods <- list(mod1=lm(y1~x, data=d), mod2=lm(y2~x, data=d))

そして、これがあなたがどのように使うかですpage

page(summary(mod), method="print")
page(lapply(mods, summary), method="print")

のほぼ再実装であることが判明したコードを含む私の元の投稿pageについては、編集履歴を参照してください。

于 2012-05-08T16:35:48.800 に答える