Help us understand the problem. What is going on with this article?

R MarkdownでRチャンクをコードブロックとして表示したい

More than 3 years have passed since last update.

タイトルの通りです。

やり方

以下のようにやります:

````
`r ''````{r}
summary(cars)
`r ''````
````

このようにRmd上に記述すると,html出力では以下のようにrenderされます:

1212.png

解説

まず,以下の前提があります:

  • R MarkdownはPandoc Markdownの文法に従う
  • 上記のテクニックはPandoc Markdownの応用

コードブロックをコードブロックで囲むには

Pandoc Markdownでは,コードブロックを示す記号(バッククオート×3)をコードブロック内に記述する方法として,「そのバッククオートよりも多い連続バッククオート(たとえばバッククオート×4)で挟みこめばOK」というのがあります。
これを利用すると,通常のコードブロックは以下のように記述できます:

````
```
(コード内容)
```
````

通常のコードブロックではこれでOKなのですが,Rチャンクの場合,これが適用できません。それは,knitした際にコードブロック内であろうともRチャンク部分を評価してしまうからです。

(Rチャンクが評価される例)
````
```{r}
(Rのコード)
```
````

この場合どうすればいいかというと,Rチャンク記号の前に,インラインRコードを差し込むと本体の評価を回避できます:

````
`r ''````{r}
summary(cars)
`r ''````
````

`r ''`というのを上記のように行頭に置くことで,その行のRの評価が終了されるためです。この結果生成されるこの箇所のmdが以下のようになります:

````
```{r}
summary(cars)
```
````

この時点でファイルはmdになっているので,あとはこれをPandocが処理してhtmlにするため,前述の画像のような出力となります。

補足: QiitaにRチャンクを記述するには

QiitaにRチャンク(というかコードブロック)をコードブロックとして記述するには,行頭に半角スペース4つを各行に置いてください。1この「行頭半角スペース4つ」というのは,Markdown記法でコードブロックを意味します。なので,Qiitaでコードブロック自体をコードブロックとして表記したい場合は,そのようにしてください。

追記: このコードブロックの前後行は必ず空行を入れておいてください。これは必須です。

詳しくはこの記事を編集モード(「編集リクエストを送る」をクリック)で覗いてみてください。

Enjoy!


  1. QiitaはQiitaのMarkdown記法があるようで,Pandoc Markdownではないです。ほんとにややこしい…。 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away