Какой метод печати используется для векторов atomi c? - PullRequest
1 голос
/ 25 мая 2020

Я не нашел, какой метод печати используется для различных классов векторов atomi c. Например, почему символы печатаются в кавычках, а числа - нет? Я не нашел метода print.numeric / print.character et c.

Причина в том, что, помимо желания более глубокого понимания, создать метод печати для нового класса, и я хотел бы понять, как печатается текущий класс.

Пример : Назначение нового класса для atomi c x, заставляет print печатать атрибуты, которые мне не нужны. Понимание того, какой метод печати стоит за этим, помогло бы мне это исправить.

x <- 1:5 
x
#> [1] 1 2 3 4 5
class(x) <- c(class(x), "new")
x
#> [1] 1 2 3 4 5
#> attr(,"class")
#> [1] "integer" "new"

1 Ответ

2 голосов
/ 25 мая 2020

Это зависит от того, насколько глубоко вы хотите go вникнуть в объяснение Tjebo. Для встроенных классов вызывается метод print.default, который, в свою очередь, вызывает некоторый внутренний код C.

Внутренняя функция C, вызываемая в print.default, определена здесь . Код C принимает объект R как объект SEXP и решает, что с ним делать, проверяя его основной тип и используя оператор switch для определения формата печати на консоли с помощью метода C print sprintf.

Это не тайна, поскольку вы можете легко проследить код, но, по сути, методы печати для базовых типов c определены в коде C, и вы не можете изменить их напрямую.

Однако это не мешает вам переопределить их, определив свои собственные методы печати для встроенных типов:

print.character <- function(x) cat("I print characters")
print("a")
#> I print characters

И вам не нужно соглашаться на печать по умолчанию атрибутов, et c, когда вы определяете новый класс:

x <- 1:5 
class(x) <- c(class(x), "new")
print.new <- function(x) cat("My fancy new class prints like this:", x)
x
#> My fancy new class prints like this: 1 2 3 4 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...