Khi tôi in thứ gì đó trực tiếp vào bảng điều khiển (nhập một số tên biến, chẳng hạn như x
, thay vì sử dụng chức năng in print(x)
), tôi muốn in khác với cách nó thường in. Ý tưởng của tôi là in ấn được thực hiện bởi một số chức năng. Nếu đúng như vậy, tất cả những gì tôi phải làm là thay thế chức năng đó bằng chức năng của riêng tôi. Tuy nhiên, tôi không thể tìm ra chức năng nội bộ thực hiện việc in ấn.Thay đổi cách in ra giao diện điều khiển
Đây là những gì tôi đã thử cho đến nay.
.real_cat = cat
cat = function(x) .real_cat("*** cat ***", x, "\n")
cat(2345)
2345 # no
In trên bảng điều khiển không được thực hiện qua cat
. Điều gì về print
?
.real_print = print
print = function(x) .real_cat("*** print ***", x, "\n")
print(2345)
2345 # no
"hello" # no
I(2345) # yes
Một số lớp học, như AsIs
, được in để an ủi qua print
, nhưng những người khác, như numeric
hoặc character
thì không. :-(
c("print.numeric", "print.character", "print.AsIs", "print.default") %in% methods("print")
# FALSE FALSE TRUE TRUE
Hóa ra print
thậm chí không có một phương pháp riêng để in numeric
hoặc character
. Lớp học đó có một phương pháp print
được in ra cửa sổ Console sử dụng print
. Nhưng lớp học mà không có một phương pháp print
không được. có thể họ được in bằng phương pháp default
?
print.default = function(x) .real_cat("*** print.default ***", x, "\n")
print.default(2345)
2345 # no
"hello" # no
số
có lẽ nếu tôi xác định một phương pháp để số, sau đó nó sẽ in nó bằng cách sử dụng phương pháp đó?
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
Đây là nơi tôi gặp khó khăn. Tôi không thể tìm ra cách nào để có một số lớp cơ bản như numeric
hoặc character
in trực tiếp ra bàn điều khiển bằng chức năng in của riêng tôi.
Nếu điều này giúp, đây là lý do tôi muốn thực hiện việc này. Tôi đang viết một gói cho các giá trị in đẹp (https://github.com/prettyprint/prettyprint). Quá nhiều lần, đầu ra của một phân tích quá khó đọc, và do đó hiểu được. Có, bạn có thể làm cho nó đẹp bằng cách sử dụng format
, signif
và round
và về cơ bản những gì gói đã làm cho bạn trong nền.
Tôi muốn in ấn dễ dàng nhất có thể cho người dùng. Tại thời điểm này, họ phải gọi chức năng in đẹp của tôi (pp(x)
). Tôi muốn chơi xung quanh với cho người dùng tùy chọn để có kết quả khá in tự động. (Tôi sẽ in cả phi xinh đẹp và phiên bản khá giá trị, để đảm bảo không có gì bị mất trong prettifying.)
Một cách giải quyết với các lớp ngầm sẽ có thêm một thuộc tính lớp cho đối tượng và sử dụng một 'phương pháp print'. Ví dụ. 'print.numeric = function (x, ...) cat (" số: \ n ", unclass (x)," \ n "); xx = c (1, 2, 3); xx; attr (xx, "class") = "số"; xx'. Hoặc bạn có thể định nghĩa "class" của riêng bạn và phương thức 'print' của nó. –