2017-03-25 38 views
6

Jeśli kod R w pliku Rmd używa tej samej nazwy zmiennej, wyrażenia wbudowane r wydają się zwracać ostatnią wartość tej zmiennej, niezależnie od położenia wyrażenia śródliniowego. Czy istnieje możliwość uniknięcia tego zachowania, z wyjątkiem upewnienia się, że ta sama nazwa zmiennej nie jest ponownie używana w różnych częściach dokumentu?Bezpośrednie wyrażenie R zwraca niepoprawną wartość

Powtarzalna przykład

--- 
title: "R Notebook" 
output: html_notebook 
--- 


```{r} 
df <- cars 
nrow(df) 
``` 

The dataset has `r nrow(df)` rows. 


```{r} 
df <- iris 
nrow(df) 
``` 

The dataset has `r nrow(df)` rows. 

To daje następujący wynik

enter image description here

używam: R w wersji 3.3.2 (31.10.2016) Platforma: x86_64- w64-mingw32/x64 (64-bit) Działa pod: Windows 7 x64 (kompilacja 7601) Dodatek Service Pack 1

rmarkdown_1.4 knitr_1.15.1

+0

Dla mnie to działa zgodnie z oczekiwaniami zarówno notebooki R i R cenowych na Win 7, R 3.3.2 rmarkdown 1.3, knitr 1.15.1. –

Odpowiedz

3

Problemem jest to, że w nagłówku, jesteś "podglądu" plik, który w rzeczywistości nie uruchamia twojego kodu od zera. Musisz go powiązać z HTMLem, aby był uruchamiany, aby twój kod w linii był poprawny.

Problem Header

--- 
title: "R Notebook" 
output: html_notebook 
--- 

Header Rozwiązanie

--- 
title: "R Notebook" 
output: 
    html_document: default 
    html_notebook: default 
--- 

Inne Uwagi

Dotychczasowe rozwiązanie ma dwa problemy. Po pierwsze, z dokumentacji dotyczącej programu RMarkdown: "Wyrażenia w linii nie przyjmują opcji dzierżawienia" (patrz koniec: http://rmarkdown.rstudio.com/lesson-4.html)

Po drugie, odpowiedź YAML poprzedniej odpowiedzi nie jest odpowiednio sformatowana, zmuszając RStudio do rzeczywistego zdziercenia pliku. Prawidłowe formatowanie będzie generować ten sam problem, który mają

--- 
title: "R Notebook" 
output: 
    html_notebook: default 
--- 
+1

To naprawdę rozwiązuje problem !!!! I teraz też rozumiem, dlaczego. Zastanawiam się jednak, czy jest to błąd w implementacji notebooka R, ponieważ "nagłówek problemu" jest domyślnym nagłówkiem definiowanym przez RStudio w szablonie generowanym po otwarciu nowego notatnika R. (Plik -> Nowy plik -> RNotebook). – Sasha

+0

W prawo. A używanie Ctrl + Shift + K nie robi nic na drutach dokumentu, to jego podgląd. Jeśli jednak zmienisz opcję "Podgląd notatnika" na "Knit to HTML", zmieni ona nagłówek i zrobi to, co chcesz. A następnie Ctrl + Shift + K zadziała (jeśli używasz skrótów klawiaturowych) –

+0

Przy okazji zauważyłem, że jeśli zrobię na drutach HTML zgodnie z twoimi propozycjami, dane wyjściowe nie będą miały tych fajnych funkcji, jak dane wyjściowe z notatnika R, takie jak interaktywne sposób ukrywania lub pokazywania kodu w kodzie HTML. Mimo, że jest to oryginalny problem, może nie być idealny. Masz pomysł, jak włączyć te same funkcje HTML, takie jak ukrywanie kodu i nadal mieć poprawne wyrażenia wbudowane? – Sasha

2

Na początku, możemy określić cache = TRUE

--- 
title: "R Notebook" 

output: 
html_notebook: default 


--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = TRUE) 
knitr::opts_chunk$set(cache=TRUE) 
``` 


```{r} 
df <- cars 
nrow(df) 
``` 

enter image description here

+0

To nie działa dla mnie. Wciąż otrzymuję te same 150 wierszy w obu przypadkach ... Czego mi brakuje? – Sasha

+0

@Sasha Używam wersji Rstudio 1.0.136. Nie jestem pewien, czy wynika to z różnicy wersji – akrun

+0

@Sasha Właśnie sprawdziłem bez użycia pamięci podręcznej = TRUE w mojej wersji. Działa dobrze. Prawdopodobnie jest to różnica wersji – akrun

Powiązane problemy