2016-08-18 3 views
4

Ich schreibe eine .Rmd Datei, die sowohl Bash-Befehle und R-Befehle anzeigt. Gibt es eine Möglichkeit, die Blöcke mit R-Code von denen mit Bash-Code zu unterscheiden? Es gibt eine knitr chunk Option, die die R-Eingabeaufforderung in ein Stück einfügt, so dassÄndern der Eingabeaufforderung in einem mehrsprachigen knitr/RMarkdown Dokument

```{R, prompt = "true"} 
plot(rnorm(100)) 
``` 

wird
> plot(rnorm(100)) 

aber für die bash Brocken dieses

```{bash, prompt = "true"} 
pandoc --version 
``` 

wird dieses

> pandoc --version 

wenn ich p beziehen sich diese

$ pandoc --version 

Antwort

6

Sie gibt könnten einen einfachen Haken versuchen:

--- 
output: html_document 
--- 

```{r} 
library('knitr') 
knit_hooks$set(
    prompt = function(before, options, envir) { 
    options(prompt = if (options$engine %in% c('sh','bash')) '$ ' else 'R> ') 
}) 
``` 

```{r, prompt=TRUE} 
1+1 
``` 

but for the bash chunks this 

```{bash, prompt=TRUE} 
pandoc --version | head -1 
``` 

```{r, prompt=TRUE} 
1+1 
``` 

enter image description here

Und können Sie hinzufügen opts_chunk$set(prompt=TRUE) so müssen Sie sich nicht für jeden Chunk Schreiben prompt=TRUE halten

+0

Dies ist ein sehr schönes Beispiel dafür, wie knitr Haken zu verwenden. Ich hatte sie bis jetzt nicht geweckt. –

1

Es ist ein wenig klobig, aber ich ich gerade fest kann „Toggle“ die Aufforderung dies zu tun:

```{r, echo = F} 
options(prompt = "$ ") 
``` 

```{bash, eval = F, prompt = T} 
pandoc --version 
``` 

```{r, echo = F} 
options(prompt = "> ") 
``` 

```{r, eval = F, prompt = T} 
plot(rnorm(100)) 
``` 

die

$ pandoc --version 
> plot(rnorm(100)) 
Verwandte Themen