R - отрицательный номер красного цвета в экспорте латекса - PullRequest
0 голосов
/ 10 мая 2019

Мой вопрос здесь очень похож на этот

Я пытаюсь экспортировать таблицу с отрицательным числом в латекс.Я хочу сделать это с print(xtable()), чтобы получить доступ ко всем опциям печати.

на данный момент единственное решение, которое я нашел, это: (принимая предыдущий пример)

library(xtable)
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)
xt <- capture.output(xtable(testMatrix))
sink(paste(file.name, ".tex", sep = "", collapse = NULL))
cat(gsub("(\\s|^)(-\\d\\.\\d*)", "\\1\\\\textcolor{red}{\\2}", xt), sep="\n")
sink()

Это работает, но мне нужно изменить некоторую информацию, которая не доступна непосредственно в xtable такие как: include.rownames, math.style.exponents или caption.placement.Лучше всего будет простой способ экспортировать отрицательные десятичные числа напрямую с print и xtable.Любая идея?

1 Ответ

4 голосов
/ 13 мая 2019

Вам нужно сделать две вещи:

  1. Измените шаблон регулярных выражений для поиска отрицательных чисел. Шаблон из этого другого вопроса только находит отрицательные числа, если они больше -10, и только если они имеют десятичную точку. Мы сделаем это более общим.
  2. Используйте capture.output(print(xtable(testMatrix))) вместо capture.output(xtable(testMatrix)). Тогда вы можете использовать функциональность print.xtable().

Обратите внимание:

library(xtable)
set.seed(123)
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)
xt <- capture.output(print(xtable(testMatrix))) # Notice use of print()
negative_number_pattern <- "(\\s|^)(-\\d+\\.*\\d*)" # Notice changed pattern
cat(gsub(negative_number_pattern, "\\1\\\\textcolor{red}{\\2}", xt), sep="\n")
% latex table generated in R 3.6.0 by xtable 1.8-4 package
% Mon May 13 08:02:53 2019
\begin{table}[ht]
\centering
\begin{tabular}{rrr}
  \hline
 & 1 & 2 \\ 
  \hline
1 &   4 &  \textcolor{red}{-9} \\ 
  2 &   8 &  \textcolor{red}{-5} \\ 
  3 &   3 &   0 \\ 
  4 &  \textcolor{red}{-8} &  \textcolor{red}{-6} \\ 
  5 &  \textcolor{red}{-1} &  \textcolor{red}{-7} \\ 
   \hline
\end{tabular}
\end{table}
xt <- capture.output(print(xtable(testMatrix), include.rownames = FALSE))
cat(gsub(negative_number_pattern, "\\1\\\\textcolor{red}{\\2}", xt), sep="\n")
% latex table generated in R 3.6.0 by xtable 1.8-4 package
% Mon May 13 08:02:53 2019
\begin{table}[ht]
\centering
\begin{tabular}{rr}
  \hline
1 & 2 \\ 
  \hline
  4 &  \textcolor{red}{-9} \\ 
    8 &  \textcolor{red}{-5} \\ 
    3 &   0 \\ 
   \textcolor{red}{-8} &  \textcolor{red}{-6} \\ 
   \textcolor{red}{-1} &  \textcolor{red}{-7} \\ 
   \hline
\end{tabular}
\end{table}

Как видите, с помощью print() мы можем использовать параметры, которые вы ищете (здесь я продемонстрирую, изменив include.rownames на FALSE).

Обновление: «Экспорт»

Если вы хотите напечатать таблицу в filename.tex непосредственно из команды R, вы можете использовать аргумент cat() file. От help("cat"):

Использование
cat (..., file = "", sep = "", fill = FALSE, label = NULL, append = FALSE)

Аргументы
... R объектов (см. «Подробности» для типов разрешенных объектов).

file Соединение или строка символов с именем файла для печати. Если "" (по умолчанию), cat печатает на стандартное выходное соединение, консоль, если не перенаправлена ​​на приемник. Если это «| cmd», вывод передается по команде, заданной «cmd», путем открытия соединения канала.

Итак, это:

library(xtable)
set.seed(123)
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)
xt <- capture.output(print(xtable(testMatrix))) # Notice use of print()
negative_number_pattern <- "(\\s|^)(-\\d+\\.*\\d*)" # Notice changed pattern
cat(gsub(negative_number_pattern, "\\1\\\\textcolor{red}{\\2}", xt), sep="\n",
    file = "filename.tex")

приводит к следующему содержанию в filename.tex:

% latex table generated in R 3.6.0 by xtable 1.8-4 package
% Mon May 13 08:53:44 2019
\begin{table}[ht]
\centering
\begin{tabular}{rrr}
  \hline
 & 1 & 2 \\ 
  \hline
1 &   4 &  \textcolor{red}{-9} \\ 
  2 &   8 &  \textcolor{red}{-5} \\ 
  3 &   3 &   0 \\ 
  4 &  \textcolor{red}{-8} &  \textcolor{red}{-6} \\ 
  5 &  \textcolor{red}{-1} &  \textcolor{red}{-7} \\ 
   \hline
\end{tabular}
\end{table}
...