2014-06-29 18 views
5

Wie kann ich Inline Code R einschließen, der auf einen Variablennamen verweist, der Leerzeichen oder andere ungewöhnliche Zeichen enthält (tatsächlicher Anwendungsfall ist Pr(>F))? Backticks are the solution in Plain R Skript, aber sie scheinen nicht zu funktionieren, wenn der Code in einem Markdown-Dokument inline ist. Hier ein Beispiel:Verwenden Sie einen Variablennamen mit Leerzeichen in Zeile R markdown

```{r} 
df <- data.frame(mydata= 1:10, yourdata = 20:29) 
names(df) <- c("your data", "my data") 

``` 

The first five values of your data are `r df$`your data`[1:5]` 

die, wenn sie gestrickt gibt:

Quitting from lines 7-9 (test-main.Rmd) 
Error in base::parse(text = code, srcfile = NULL) : 
    2:0: unexpected end of input 
1: df$ 
^
Calls: <Anonymous> ... <Anonymous> -> withVisible -> eval -> parse_only -> <Anonymous> 
Execution halted 

Beachten Sie, dass diese von showing the backticks unterscheidet. Alles was ich tun möchte ist, dass der Code ausgeführt wird, wenn das Dokument gestrickt wird. Meine Problemumgehung besteht darin, den Wert der ungeradzahligen Variablen einem anderen Objekt mit einem einfachen Namen im Chunk vor dem Inline-Code zuzuweisen. Aber ich bin gespannt, wie man diese Objekte mit ungewöhnlichen Namen direkt inline aufruft.

Antwort

11

In diesem Fall kann die normale Anführungszeichen verwenden,

The first five values of your data are `r df$"your data"[1:5]` 

oder eher

The first five values of your data are `r df[["your data"]][1:5]` 
+0

Dank! So einfach ist das, ich schäme mich, ich habe es nicht in meiner Raserei anderer Methoden versucht! – Ben

+0

vermutlich gibt es andere Instanzen (ggplot?), Wo dies fehlschlagen würde; Ich glaube nicht, dass die Mustererkennung von knitr unglücklich mit verschachtelten Backticks und Vanillemarkierungen umgehen kann. – baptiste

+0

@baptiste Sie haben Recht. knitr kann verschachtelte Backticks nicht verarbeiten. Es wird direkt nach dem zweiten Backtick aufhören. –