首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R的xtable中裁剪LaTeX表中的额外水平规则

从R的xtable中裁剪LaTeX表中的额外水平规则
EN

Stack Overflow用户
提问于 2016-11-01 00:36:41
回答 1查看 558关注 0票数 1

问:我如何从R's的LaTeX表中修剪额外的水平规则长度?

我想做一些像你在下面的R代码中看到的事情。但是代码会抛出并出错,不会产生所需的结果。

代码语言:javascript
复制
% table 1
    \begin{table}[ht]
      \centering
      \begin{tabular}{@{}lrr@{}}
        \toprule  
        & a\_a & b\_b \\ 
        \midrule 
        A & 0.35 & -1.05 \\ 
        B & 0.64 & 0.92 \\ 
        \bottomrule 
      \end{tabular}
    \end{table}

% table 2 
    \begin{table}[ht]
      \centering
      \begin{tabular}{lrr}
        \toprule  
        & a\_a & b\_b \\ 
        \midrule 
        A & 0.36 & -1.05 \\ 
        B & 0.64 & 0.92 \\ 
        \bottomrule 
      \end{tabular}
    \end{table}

代码语言:javascript
复制
# Begin R code
library(xtable)
library(stringr)
options(xtable.comment = FALSE)
set.seed(10)
mat <- matrix(rnorm(4), nrow=2)
rownames(mat) <- LETTERS[1:2]
colnames(mat) <- str_c(letters[1:2], "_", letters[1:2])
#mat.x <- xtable(mat, caption="My Caption!", align="lrr", digits=2) # No Error!
mat.x <- xtable(mat, align="@{}lrr@{}", digits=2) # Error!
print(mat.x, 
      sanitize.text.function = function(x){x},
      sanitize.colnames.function = function(x){str_replace_all(x, "_", "\\\\_")},
      floating=T,
      hline.after=NULL,
      math.style.negative=F,
      add.to.row=list(pos=list(-1,0,nrow(mat.x)),
                      command=c("\\toprule ", "\\midrule ", "\\bottomrule ")))

# Error in `align<-.xtable`(`*tmp*`, value = "@{}lrr@{}") : 
#  "align" must have length equal to 3 ( ncol(x) + 1 )
# In addition: Warning message:
#  In .alignStringToVector(value) : Nonstandard alignments in align string
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-01 23:37:47

您需要传递一个字符数与列+ 1相同的字符串,或者传递一个长度相同的字符串。所以,尝试(在其他排列中)

代码语言:javascript
复制
align=c("@{}l", "r", "r@{}")

为什么要看一下这些功能。

代码语言:javascript
复制
library(xtable)

set.seed(10)
mat <- matrix(rnorm(4), nrow=2)
rownames(mat) <- LETTERS[1:2]
colnames(mat) <- paste0(letters[1:2], "_", letters[1:2])
xtable(mat, align="@{}lrr@{}", digits=2) 

“对齐”的长度必须等于3( ncol(x) +1)

警告建议传递一个长度为3的向量,所以请尝试

代码语言:javascript
复制
xtable(mat, align=c("@{}l","r", "r@{}"), digits=2)
# \begin{table}[ht]
# \centering
# \begin{tabular}{@{}lrr@{}}
# ---
# ---

所以这就像预期的一样。此外,对齐参数对于如何传递字符串是健壮的,只要字符串具有所需的长度。

代码语言:javascript
复制
xtable(mat, align=c("@{}lrr@", "{", "}"), digits=2)
# \begin{table}[ht]
# \centering
# \begin{tabular}{@{}lrr@{}}
# ---
# ---

要了解为什么第一个字符串不能工作,请查看xtable:::xtable.data.frame函数的相关部分:必须与align有关

代码语言:javascript
复制
align(x) <- switch(1 + is.null(align), align, c("r", c("r", "l")[(characters | factors) + 1]))

这将导致xtable:::`align<-.xtable,然后是xtable:::.alignStringToVector

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40352560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档