0

多くの関数の出力はリスト構造になっています - 例えば lm()。その結果、「$」または角括弧を使用したインデックスを使用して、出力の個別のセクションを取得できます。私の質問は、それがリストであることをあからさまに示すことなく、リスト形式で出力を作成する方法です。ご存じのように、リストが画面に出力されると、通常、次のようにサブリスト名またはインデックスが示されます。

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

$a
[1] 1 2 3

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

ただし、「$」とサブリスト名を使用してこれらのサブリストを抽出することはできますが、lm() の出力は、「$」とサブリスト名を使用して異なるサブリストを表示することはありません。

2 番目の質問は、一部の関数の出力には、実際に画面に表示されるものよりもはるかに多くの情報が含まれているという事実に関するものです (例: 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 に答える