Код печати по умолчанию для матриц и data.frames внутренне обрабатывает непечатаемые символы и экранирует их. Вот почему код escape-символа ANSI '\033'
экранируется в `'\ 033', а не печатается напрямую.
Если вы не хотите этого, вам придется написать собственную функцию print.data.frame
аналогично тому, как это делает tibble . Чтобы сделать это правильно, требуется немало логики c (и, следовательно, кода). Вы можете обмануть, однако:
print.data.frame = function (x, ...) {
output = capture.output(base::print.data.frame(x, ...))
colnames = crayon::underline(colnames(x))
regmatches(output[1L], gregexpr('\\S+', output[1L]))[[1L]] = colnames
cat(output, sep = '\n')
}
Этот захватывает стандартный вывод print.data.frame
и заменяет первую строку (= заголовки столбцов) версией с подчеркиванием.
(Обратите внимание, что если в именах столбцов есть пробелы, приведенный выше код завершится ошибкой .)