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

ℕʘʘ*_*ḆḽḘ 4 latex r knitr dplyr

这是如何使用一些最小格式将数据框导出到latex的后续行动

考虑这个工作示例

```{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))
``` 
Run Code Online (Sandbox Code Playgroud)

这使

\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}
Run Code Online (Sandbox Code Playgroud)

在这里,我想将此输出写入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"
Run Code Online (Sandbox Code Playgroud)

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

use*_*330 7

当你打印时piper,你实际上是在调用一种可以进行大量更改的打印方法. piper不只是那10行文字.

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

lines <- piper  %>% capture.output
lines[c(-1, -length(lines))]
Run Code Online (Sandbox Code Playgroud)

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

lines[c(-1, -length(lines))] %>% cat(sep = "\n")
Run Code Online (Sandbox Code Playgroud)