変更通常は印刷されます。私の考えは、印刷はある機能によって行われるということです。その場合、私がしなければならないことは、その機能を自分自身の機能で置き換えることだけです。しかし、私は印刷を行う内部機能が何であるか把握できません。私は(むしろ印刷機能<code>print(x)</code>を使用するよりも、このよう<code>x</code>として、いくつかの変数名を入力します)、コンソールに直接何かを印刷するとき、私はそれが違っその方法から印刷したいのですがどのように出力がコンソールに出力され
これまで私が試したことはこれです。
.real_cat = cat
cat = function(x) .real_cat("*** cat ***", x, "\n")
cat(2345)
2345 # no
コンソールに印刷がcat
を介して行われていません。 print
はどうですか?
.real_print = print
print = function(x) .real_cat("*** print ***", x, "\n")
print(2345)
2345 # no
"hello" # no
I(2345) # yes
一部のクラスは、AsIs
のように、print
経由でコンソールに出力されますが、numeric
またはcharacter
のような他のものは、ありません。 :-(
c("print.numeric", "print.character", "print.AsIs", "print.default") %in% methods("print")
# FALSE FALSE TRUE TRUE
はprint
メソッドを持つクラスがprint
を使用してコンソールに出力されている。print
もnumeric
またはcharacter
を印刷するための別の方法を持っていませんが判明。しかしprint
方法を持っていないクラス。おそらく彼らは、default
メソッドを使用して印刷されていない?
print.default = function(x) .real_cat("*** print.default ***", x, "\n")
print.default(2345)
2345 # no
"hello" # no
号
私は数値のためのメソッドを定義するかもしれない場合は、次にその方法で印刷しますか?
print.numeric = function(x) .real_cat("*** print.numeric ***", x, "\n")
print.numeric(2345)
2345 # no
print.character = function(x) .real_cat("*** print.character ***", x, "\n")
print.character("hello")
"hello" # no
ここで私は立ち往生しています。 numeric
やcharacter
のような基本的なクラスを自分のプリント機能を使って直接コンソールに出力する方法はありません。
これが役に立ちましたら、私がこれをしたい理由があります。私はpretty-print値(https://github.com/prettyprint/prettyprint)にパッケージを書いています。あまりにも多くの時間、分析の出力は読みにくく、したがって理解することができます。はい、format
,signif
、およびround
を使用するとかなり美しくすることができます。これは基本的にはパッケージがバックグラウンドで既に実行しているものです。
できるだけ簡単にきれいな印刷をしたいと思います。この時点で、彼らは私のきれいなプリント機能(pp(x)
)を呼ばなければなりません。私は結果をきれいに印刷するオプションをユーザに与えて遊びたいと思っています。 (私は確信して何もprettifyingに失われないようにするために、非かわいいと価値のかなりバージョンの両方を印刷します)
暗黙クラスで回避策は、オブジェクトにクラス属性を追加し、 'print'方法を使用することであろう。例えば。 'print.numeric = function(x、...)cat("数値:\ n "、unclass(x)、" \ n "); xx = c(1、2、3); xx; attr(xx、 "class")= "数値"; xx'。あるいは、独自の "クラス"とその 'print'メソッドを定義することもできます。 –