當我將某些東西直接打印到控制檯(鍵入某些變量名稱,如x
,而不是使用打印功能print(x)
)時,我希望它的打印方式不同於它通常打印。我的想法是,打印是由一些功能完成的。如果是這樣的話,我所要做的就是用我自己的功能來替換該功能。但是,我無法弄清楚打印的內部功能是什麼。更改將輸出打印到控制檯的方式
這是我到目前爲止嘗試過的。
.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
甚至沒有一個單獨的方法打印numeric
或character
。有一個print
方法的類打印到使用print
控制檯,但是類,沒有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
直接打印到控制檯。
如果這有幫助,這是我想要這樣做的原因。我正在編寫一個打包漂亮值的包(https://github.com/prettyprint/prettyprint)。太多次,分析的輸出太難以閱讀,因此理解。是的,你可以使用format
,signif
和round
,這基本上是這個包已經在後臺爲你做的。
我想爲用戶儘可能簡單地打印漂亮的照片。此時,他們必須打電話給我的漂亮打印功能(pp(x)
)。我想玩弄讓用戶可以自動打印結果的選項。 (我會同時打印非漂亮,價值漂亮的版本,以確保沒有丟失的美化。)
與隱式類A的解決方法是一個類屬性添加到對象,並使用一個'print'方法。例如。 'print.numeric = function(x,...)cat(「numeric:\ n」,unclass(x),「\ n」); xx = c(1,2,3); XX; attr(xx,「class」)=「numeric」; xx'。或者你可以定義你自己的「類」和它的「打印」方法。 –