R-乳胶出口中红色的负数

时间:2019-05-10 16:22:23

标签: r colors export latex

我的问题非常similar to this one

我正在尝试将带有负数的表导出到乳胶。 我想用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.rownamesmath.style.exponentscaption.placement。最好的方法是直接使用printxtable导出负十进制数字的简单方法。 任何想法?

1 个答案:

答案 0 :(得分:4)

您需要做两件事:

  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进行演示)。

更新:“正在导出”

如果要直接从R命令将表打印到filename.tex,则可以使用cat()的{​​{1}}参数。来自file

  

用法
  cat(...,file =“”,sep =“”,fill = FALSE,标签= NULL,       append = FALSE)

     

参数
  ... R对象(有关允许的对象类型,请参见“详细信息”)。

     

文件连接或命名要打印到的文件的字符串。如果为“”(默认值),则cat打印到标准输出连接,除非通过接收器重定向,否则将控制台输出。如果为“ | cmd”,则通过打开管道连接将输出通过管道传递给“ cmd”给出的命令。

所以,这个:

help("cat")

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