Menekan tabel kable yang panjang dalam output inline Rmd sambil mempertahankannya dalam PDF akhir

Saya mencoba membuat R menyembunyikan tabel panjang yang dibuat dengan kable & kableExtra di keluaran Rmd sebaris sambil menyimpannya di PDF rajutan akhir. Saya hanya ingin melakukan ini dengan beberapa bagian, jadi saya lebih suka tidak memilih jalur pengaturan opsi global untuk mematikan semua output inline.

Saya telah melalui beberapa iterasi opsi potongan yang tercantum di sini: https://yihui.name/knitr/demo/output/ dan di sini: https://yihui.name/knitr/options/#plots tetapi belum menemukan yang benar, jadi saya tidak yakin apakah saya mencari di tempat yang tepat atau hanya melewatkan pengaturan yang benar.

YAML:

---
output:
  pdf_document:
    latex_engine: xelatex
---

Kode:

```{r}
# Setup
library(knitr)
library(kableExtra)

# Create some data
dat <- data.frame ("A" = c(1:5),
                   "B" = c("Imagine a really long table",
                           "With at least 50 rows or so",
                           "Which get in the way in the inline output",
                           "But I want in the final PDF",
                           "Without influencing the other chunks")
                   )
# Produce the table
kable(dat, booktabs=TRUE, format="latex", longtable=TRUE) %>%
  kable_styling(latex_options="HOLD_position")
```

Output sebaris yang saya tidak ingin munculkan setiap kali saya menjalankan hal ini:

\begin{table}[H]
\centering
\begin{tabular}{rl}
\toprule
A & B\\
\midrule
1 & Imagine a really long table\\
2 & With at least 50 rows or so\\
3 & Which get in the way in the inline output\\
4 & But I want in the final PDF\\
5 & Without influencing the other chunks\\
\bottomrule
\end{tabular}
\end{table}

Jika Anda membayangkan harus menelusuri 50-100 baris hal ini saat mencoba menulis kode, Anda dapat melihat betapa menjengkelkan dan memakan waktu.


person bcarothers    schedule 16.07.2018    source sumber


Jawaban (1)


Fungsi ini mendeteksi bahwa dokumen RMarkdown sedang diproses secara inline di RStudio, bukan melalui perajutan:

is_inline <- function() {
  is.null(knitr::opts_knit$get('rmarkdown.pandoc.to'))  
}

Jadi Anda bisa membungkus kode bermasalah Anda dengan sesuatu seperti

if (!is_inline()) {
  kable(dat, booktabs=TRUE, format="latex", longtable=TRUE) %>%
  kable_styling(latex_options="HOLD_position")
}

atau membuat fungsi lain

hide_inline <- function(x) {
  if (is_inline())
    cat("[output hidden]")
  else
    x
}

dan tambahkan ke pipa Anda:

kable(dat, booktabs=TRUE, format="latex", longtable=TRUE) %>%
  kable_styling(latex_options="HOLD_position") %>%
  hide_inline()

Kedua hal ini memiliki kelemahan karena memerlukan modifikasi pada kode Anda yang akan ditampilkan jika echo=TRUE. Saya rasa tidak ada opsi potongan yang setara dengan hide_inline, tapi saya bisa saja salah.

Jika Anda benar-benar putus asa, Anda dapat menggunakan echo=2:3 atau serupa untuk menyembunyikan baris if (!is_inline()) { dan }.

person user2554330    schedule 18.07.2018