To jest bardzo prosta prośba, i nie mogę uwierzyć, że jeszcze nie znalazłem rozwiązania, ale szukałem jej daleko i bez powodzenia.ESS & Knitr/Sweave: Jak pobrać plik Rnw do interaktywnej sesji?
Mam plik .Rnw
załadowany w Emacs, używam M-n s
, aby go skompilować. Wszystko działa dobrze, a nawet otwiera bufor R
. Wspaniały. Ale ten bufor jest całkowicie bezużyteczny: nie zawiera obiektów, które właśnie pozyskałem!
Przykład minimalne .Rnw
plików
\documentclass{article}
\begin{document}
<<>>=
foo <- "bar"
@
\end{document}
Stosując M-n s
, że mają nowy R buforze o sesji załadowany, ale:
> foo
Error: object 'foo' not found
To rozczarowujące. Chciałbym interaktywnie korzystać z danych. Jak to osiągnąć? Nie chcę dostarczać plików wiersz po wierszu lub region-region za pomocą C-c C-c
lub czegoś podobnego za każdym razem, gdy zmieniam kod. Idealnie powinno być tak, jak funkcja źródłowa RStudio, która pozostawia mi w pełni przygotowaną sesję R.
Nie próbowałem tego jeszcze ze swetrem, tylko z dzianiną.
EDYCJA: opcja porcji eval=TRUE
nie wydaje się powodować prawidłowego zachowania.
w szczególności, 'knitr' domyślnie ocenia kod w' parent.frame() ', chyba że' knit (..., envir = globalenv()) '(czasami' parent.frame() 'jest po prostu' globalenv() ', a czasami nie jest) –
Miło słyszeć, że to naprawiłeś. Dzięki! Zgodnie z komentarzem @ Yihui, jakiś czas temu naprawiłem to, edytując '.ess_weave()' w '" $ EMACS_HOME/site-lisp/ess/etc/ESSR.R "', aby użyć 'envir = parent .frame (2) '(jak w' command (file, envir = parent.frame (2)) '), zamiast domyślnego' knit() 'envir = parent.frame()'. (Jestem teraz ** użytkownikiem ** knitr **, więc nie jestem pewien, jak ta edycja będzie grała z Sweave.) –
Dziękuję za odpowiedź! Ustawienie 'ess-swv-processing-command' nie rozwiązało problemu, ale teraz szukam możliwości użycia' envir = globalenv() '. Nie sądzę, żebym chciał przełączyć się na wersję rozwojową, ale będę oglądał ESS w górę strumienia jak jastrząb :-) –