如何保存和编辑kable打印的内容?

时间:2017-08-29 02:07:35

标签: r dplyr latex knitr

这是how to export a dataframe to latex with some minimal formatting?

的后续行动

考虑这个工作示例

```{r table, results='asis'}
library(knitr)
library(kableExtra)
library(magrittr)

dataframe <- data.frame(mytext1 = c('HELLO',
                                   'WORLD'),
                        mytext2 = c('HELLO',
                                   'AGAIN'),
                        value1 = c(1,2), 
                        value2 = c(1,2))

piper <- dataframe %>%
    kable(format = 'latex', booktabs = TRUE) %>%
    add_header_above(header = c("Text" = 2, "Values" = 2))
``` 

给出了

\begin{tabular}{llrr}
\toprule
\multicolumn{2}{c}{Text} & \multicolumn{2}{c}{Values} \\
\cmidrule(l{2pt}r{2pt}){1-2} \cmidrule(l{2pt}r{2pt}){3-4}
mytext1 & mytext2 & value1 & value2\\
\midrule
HELLO & HELLO & 1 & 1\\
WORLD & AGAIN & 2 & 2\\
\bottomrule
\end{tabular}

这里我想将此输出写入tex文件,并手动删除它的第一行和最后一行。

不幸的是,天真的

piper  %>% filter(row_number() >=2 & row_number() <=(length(piper) - 1))
Error in UseMethod("filter_") : 
  no applicable method for 'filter_' applied to an object of class "knitr_kable"

在这里不起作用。有任何想法吗? 谢谢!

1 个答案:

答案 0 :(得分:6)

当您打印piper时,您实际上正在调用一个进行大量更改的打印方法。 piper不仅仅是那10行文字。

如果你想获得这些行,你可以调用capture.output(piper),你应该能够将其作为一个字符向量进行过滤。我不认为row_number()函数适用于那些,但应定期编制索引。例如,

lines <- piper  %>% capture.output
lines[c(-1, -length(lines))]

编辑添加:要打印没有行号的内容,请使用cat()。例如,

lines[c(-1, -length(lines))] %>% cat(sep = "\n")