如何使xtable在knitr文档中默认绘制垂直线

如何使xtable在knitr文档中默认绘制垂直线,r,knitr,xtable,R,Knitr,Xtable,我希望knitr在默认情况下生成列之间有垂直线的表 我知道我可以传递align参数来打印xtable。但这是重复的,而且对于列数不同的表,align的值也不相同 如何使其成为默认行为,而不是对每个表执行此操作?您始终可以修改xtable一点,以动态构造align参数: make_align_string <- function(x) { k <- ncol(x) format_str <- ifelse(sapply(x, is.numeric), "r", "l")

我希望
knitr
在默认情况下生成列之间有垂直线的表

我知道我可以传递
align
参数来打印
xtable
。但这是重复的,而且对于列数不同的表,
align
的值也不相同


如何使其成为默认行为,而不是对每个表执行此操作?

您始终可以修改
xtable
一点,以动态构造
align
参数:

make_align_string <- function(x) {
  k <- ncol(x)
  format_str <- ifelse(sapply(x, is.numeric), "r", "l")
  paste0(c("r", format_str), collapse = "|")
}

xtable_custom <- function(x, ...) xtable(x, ..., align = make_align_string(x))

xtable_custom(head(iris))
% latex table generated in R 3.2.1 by xtable 1.8-0 package
% Mon Feb 15 14:58:39 2016
\begin{table}[ht]
\centering
\begin{tabular}{r|r|r|r|r|l}
  \hline
 & Sepal.Length & Sepal.Width & Petal.Length & Petal.Width & Species \\ 
  \hline
1 & 5.10 & 3.50 & 1.40 & 0.20 & setosa \\ 
  2 & 4.90 & 3.00 & 1.40 & 0.20 & setosa \\ 
  3 & 4.70 & 3.20 & 1.30 & 0.20 & setosa \\ 
  4 & 4.60 & 3.10 & 1.50 & 0.20 & setosa \\ 
  5 & 5.00 & 3.60 & 1.40 & 0.20 & setosa \\ 
  6 & 5.40 & 3.90 & 1.70 & 0.40 & setosa \\ 
   \hline
\end{tabular}
\end{table}

make_align_string这会破坏表中的默认对齐方式(即对字符串和数字的不同处理),但您可以使用例如as.numeric轻松恢复。