web-dev-qa-db-ja.com

R-MarkdownのR ChunkでLaTeXコードを使用する方法

現在、rmarkdownを使用してレポートを作成しているため、rコードチャンク内にセクションを作成します。これがcat()とresults = "asis"の助けを借りて可能であることがわかりました。この解決策の私の問題は、私のRコードの結果とコードがいつものように適切に表示されないことです。

例えば

---
title: "test"
output: pdf_document
---

```{r, results='asis'}
for (i in 1:10) {
  cat("\\section{Part:", i, "}")
  summary(X)
  $\alpha = `r X[1,i]`$  
}
```

ほとんどのトリックを行いますが、ここにはまだ2つの問題があります。

  • summary()のR出力は、LaTeXコードとして解釈されるため、非常に奇妙に表示されます。
  • この環境ではLaTeXの数式を使用できないので、すべてのセクションをR変数を使用する可能性がある方程式で終了させる場合、これは不可能です

誰かがこれらの問題のいくつかの解決策を知っていますか、またはループ内にセクションを作成し、このセクションにRコード、R出力、およびLaTeX式を含めるための回避策さえありますか?それとも、それらのうち少なくとも1つですか?

いろいろなアドバイスをありがとう

6
Quastiat

コードブロックにそれほど依存することなく、インラインの後にあることを実行できます。

最小限の例として。

---
title: "test"
output: pdf_document
---

```{r sect1_prep, include=FALSE}
i <- 1
```

\section{`r paste0("Part: ", i)`}

```{r sect1_body}
summary(mtcars[, i])
```

$\alpha = `r mtcars[1, i]`$

```{r sect2_prep, include=FALSE}
i <- i + 1
```

\section{`r paste0("Part: ", i)`}

```{r sect2_body}
summary(mtcars[, i])
```

$\alpha = `r mtcars[1, i]`$

生産する...

enter image description here

セクションfactoryが本当に必要な場合は、panderを検討できます。

---
title: "test"
output: pdf_document
---

```{r setup, include=FALSE}
library(pander)
panderOptions('knitr.auto.asis', FALSE)
```

```{r, results='asis', echo=FALSE}

empty <- lapply(1:10, function(x) {

  pandoc.header(paste0("Part: ", x), level = 2)
  pander(summary(mtcars[, x]))
  pander(paste0("$\\alpha = ", mtcars[1, x], "$\n"))

})

```

生成する...

enter image description here

サマリーテーブル形式の例を削除

---
title: "test"
output: pdf_document
---

```{r setup, include=FALSE}
library(pander)
panderOptions('knitr.auto.asis', FALSE)
```

```{r, results='asis', echo=FALSE}

content <- lapply(1:10, function(x) {

  head <- pandoc.header.return(paste0("Part: ", x), level = 2)
  body1 <- pandoc.verbatim.return(attr(summary(mtcars[, x]), "names"))
  body2 <- pandoc.verbatim.return(summary(mtcars[, x]))
  eqn <- pander_return(paste0("$\\alpha = ", mtcars[1, x], "$"))

  return(list(head = head, body1 = body1, body2 = body2, eqn = eqn))

})

writeLines(unlist(content), sep = "\n\n")
```

enter image description here

9
Kevin Arseneau