gpt4 book ai didi

r - xtable 单元格中的换行符

转载 作者:行者123 更新时间:2023-12-04 02:20:14 26 4
gpt4 key购买 nike

我正在使用 xtable 自动生成 LaTeX 表格,并希望在单元格内强制换行/换行。

这可以在单元格中使用 \newline 来完成,但是我无法阻止 xtable 替换我的反斜杠 (\)使用 $\backslash$

举个例子....

library(magrittr)
library(xtable)
my.data <- cbind(c("1", "2", "3"),
c("0", "1", "2"),
c("2", "3", "4")) %>%
as.data.frame()
## Generate output variable
my.data$out <- paste0(my.data$V1,
" \\newline (",
my.data$V2,
" to ",
my.data$V3,
")")
## Check the data frame...
my.data
V1 V2 V3 out
1 1 2 3 1 \\newline (2 to 3)
2 0 1 2 0 \\newline (1 to 2)
3 2 3 4 2 \\newline (3 to 4)
## Now generate xtable
xtable(my.data)
% latex table generated in R 3.2.0 by xtable 1.7-4 package
% Wed Jun 24 11:51:59 2015
\begin{table}[ht]
\centering
\begin{tabular}{rllll}
\hline
& V1 & V2 & V3 & out \\
\hline
1 & 1 & 2 & 3 & 1 $\backslash$newline (2 to 3) \\
2 & 0 & 1 & 2 & 0 $\backslash$newline (1 to 2) \\
3 & 2 & 3 & 4 & 2 $\backslash$newline (3 to 4) \\
\hline
\end{tabular}
\end{table}

paste0() 按预期工作正常,但将此数据帧传递给 xtable 不会产生我预期(/希望)的结果,即... .

xtable(my.data)
% latex table generated in R 3.2.0 by xtable 1.7-4 package
% Wed Jun 24 11:51:59 2015
\begin{table}[ht]
\centering
\begin{tabular}{rllll}
\hline
& V1 & V2 & V3 & out \\
\hline
1 & 1 & 2 & 3 & 1 \newline (2 to 3) \\
2 & 0 & 1 & 2 & 0 \newline (1 to 2) \\
3 & 2 & 3 & 4 & 2 \newline (3 to 4) \\
\hline
\end{tabular}
\end{table}

所以当通过 LaTeX 解析时,我在该单元格中得到换行符。

关于line breaks in captions的类似问题建议使用双转义反斜杠,但这在这种情况下也不起作用......

my.data$out <- paste0(my.data$V1,
" \\\\newline (",
my.data$V2,
" to ",
my.data$V3,
")")
% latex table generated in R 3.2.0 by xtable 1.7-4 package
% Wed Jun 24 11:57:04 2015
\begin{table}[ht]
\centering
\begin{tabular}{rllll}
\hline
& V1 & V2 & V3 & out \\
\hline
1 & 1 & 2 & 3 & 1 $\backslash$$\backslash$newline (2 to 3) \\
2 & 0 & 1 & 2 & 0 $\backslash$$\backslash$newline (1 to 2) \\
3 & 2 & 3 & 4 & 2 $\backslash$$\backslash$newline (3 to 4) \\
\hline
\end{tabular}
\end{table}

接下来我查看了xtable helpgraph gallery并认为我可以使用 sanitise.text.function 明确指定将 \ 替换为 \ (然后我可以只使用\newline 在我的 paste0() 调用中)但不幸的是,这也不起作用,因为第二个 \ 被视为转义了以下结束双引用...

xtable(my.data, sanitise.text.function = function(str)gsub("\", "\",str,fixed=TRUE))
Error: unexpected input in:
"xtable(my.data,
sanitise.text.function = function(str)gsub("\", "\"

我可以使用整个字符串 \newline 并将其替换为自身吗?

my.data$out <- paste0(my.data$V1,
" \newline (",
my.data$V2,
" to ",
my.data$V3,
")")
xtable(my.data, sanitise.text.function = function(str)gsub("\newline", "\newline",str,fixed=TRUE))
% latex table generated in R 3.2.0 by xtable 1.7-4 package
% Wed Jun 24 12:05:25 2015
\begin{table}[ht]
\centering
\begin{tabular}{rllll}
\hline
& V1 & V2 & V3 & out \\
\hline
1 & 1 & 0 & 2 & 1
ewline (0 to 2) \\
2 & 2 & 1 & 3 & 2
ewline (1 to 3) \\
3 & 3 & 2 & 4 & 3
ewline (2 to 4) \\
\hline
\end{tabular}
\end{table}

因为 \n 在通过 xtable 解析时现在被视为换行符,所以没有什么乐趣。

This thread建议使用 identity 作为 sanitise.text.function 的函数参数,但这也不起作用(也没有使用 function(x){ x}).我找到了一个 post on R-help问类似的问题(但问题是 \t 被解释为制表符)但这也不起作用(为简洁起见再次省略了输出)。

 my.data
V1 V2 V3 out
1 1 0 2 1 \\newline (0 to 2)
2 2 1 3 2 \\newline (1 to 3)
3 3 2 4 3 \\newline (2 to 4)
xtable(my.data, sanitise.text.function = identity)
% latex table generated in R 3.2.0 by xtable 1.7-4 package
% Wed Jun 24 13:09:47 2015
\begin{table}[ht]
\centering
\begin{tabular}{rllll}
\hline
& V1 & V2 & V3 & out \\
\hline
1 & 1 & 0 & 2 & 1 $\backslash$newline (0 to 2) \\
2 & 2 & 1 & 3 & 2 $\backslash$newline (1 to 3) \\
3 & 3 & 2 & 4 & 3 $\backslash$newline (2 to 4) \\
\hline
\end{tabular}
\end{table}

my.data
V1 V2 V3 out
1 1 0 2 1 \newline (0 to 2)
2 2 1 3 2 \newline (1 to 3)
3 3 2 4 3 \newline (2 to 4)
xtable(my.data,
sanitise.text.function = identity)
% latex table generated in R 3.2.0 by xtable 1.7-4 package
% Wed Jun 24 13:28:28 2015
\begin{table}[ht]
\centering
\begin{tabular}{rllll}
\hline
& V1 & V2 & V3 & out \\
\hline
1 & 1 & 0 & 2 & 1
ewline (0 to 2) \\
2 & 2 & 1 & 3 & 2
ewline (1 to 3) \\
3 & 3 & 2 & 4 & 3
ewline (2 to 4) \\
\hline
\end{tabular}
\end{table}

感觉我已经接近使用 sanitise.text.function 选项,但我无法解决。有没有办法以某种方式做到这一点?

提前感谢您的任何建议/见解。

最佳答案

您是否使用 options() 而不是 print() 配置 sanitize.*.function?例如,

options(xtable.sanitize.text.function=identity)

防止在单元格中将 \ 转换为 $\backslash$

关于r - xtable 单元格中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31024961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com