it-swarm.com.de

Retikulieren - Ausführen von Python-Blöcken in Rmarkdown

Vielleicht fehlt mir etwas, aber wenn der folgende Code der Inhalt meiner Rmd-Datei ist

```{r}
library(reticulate)
use_virtualenv("r-reticulate")
py_available(TRUE)
```
```{python}
a = 7
print(a)
```
```{r}
py$a
```

wenn ich die Datei stricke, ist die Ausgabe für den letzten Block 7 (wie erwartet). Wenn Sie jedoch auf die Schaltfläche Alle ausführen in Rstudio klicken (oder einzelne Abschnitte nacheinander ausführen), wird NULL für den letzten Abschnitt angezeigt. 

Im Vergleich mit dem R-Notebook-Beispiel Es scheint, als würde die Zuweisung von flights im Python-Chunk py$flights für R verfügbar machen. Dies scheint jedoch nicht der Fall zu sein.

Fragen: 

  1. Gibt es eine Möglichkeit, von R aus auf eine Variable zuzugreifen, die in einem Python-Block erstellt wurde, der zuvor ausgeführt (nicht gestrickt) wurde? Wie kann man eine Variable, die innerhalb eines Python-Blocks erstellt wurde, nach R "exportieren"? 
  2. Was ist eine gute Referenz, um zu verstehen, was passiert, wenn ich in einem Python-Block einer Rmarkdown-Datei auf die Ausführungsschaltfläche klicke?

EDIT: Ok Also nachdem ich die ersten Antworten hier gesehen hatte, habe ich sowohl Knitr als auch Rmarkdown auf die neueste Version aktualisiert, hatte aber immer noch das gleiche Problem . Ich fügte meiner Datei py_available(TRUE) hinzu Vergewissern Sie sich, dass die Initialisierung noch nicht abgeschlossen ist. Der letzte Block ergibt 7, wenn er gestrickt wird. Wenn Sie jedoch einzelne Abschnitte einzeln ausführen, wird dies angezeigt 

> py$a
Error in py_get_attr_impl(x, name, silent) : 
  AttributeError: 'module' object has no attribute 'a'

Das Problem ist: Das Zuweisen eines Wertes zu a im Python-Block führt zu py$a in der R-Umgebung nichts. Vielleicht ist diese "gemeinsame" Umgebung zwischen R und Python nicht so, wie das Paket funktionieren soll? Auch für zusätzliche Informationen

> py_config()
python:         /usr/bin/python
libpython:      /usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so
pythonhome:     /usr:/usr
version:        2.7.14 (default, Sep 23 2017, 22:06:14)  [GCC 7.2.0]
numpy:          /usr/lib/python2.7/dist-packages/numpy
numpy_version:  1.12.1

python versions found: 
 /usr/bin/python
 /usr/bin/python3
7
Freguglia

Dies ist im aktuellen RStudio Desktop behoben, z. 1.2.1114. Wenn Sie jedoch mit RStudio Server Pro 1.1.456 nicht weiterkommen möchten, können Sie mit py_run_string wahrscheinlich reticulate::repl_python() verwenden, um eine Python-Konsole in der R-Konsole zu verwenden, in der Sie Ihre Python-Chunks ausführen können, indem Sie sie in die Konsole einfügen .

problemumgehung:  workaround Arbeiten:  working

1
jan-glx

Rmarkdown/knitr:

Ausführen der Chunks:

Das Ausführen der Stücke ohne Stricken des Dokuments wird bisher nicht unterstützt. Siehe hier: https://github.com/yihui/knitr/issues/1440 oder Vernetzen Sie den Status nicht zwischen R/Python-Zellen oder Python/Python-Zellen in RMarkdown .

Edit: Workaround von Freguglia:

"Umgehung ist, Python-Chunks in R-Chunks umzuwandeln und den gesamten Inhalt einfach in die Funktion py_run_string () zu packen, sodass alles, was Sie in diesem Code-Code zuweisen, von R aus mit py $ variable_name erreichbar ist."

Stricken des Dokuments:

Eine Möglichkeit besteht darin, knitr wie oben vorgeschlagen zu aktualisieren, aber Sie müssen nicht und benötigen nicht täglich RStudio.

Wenn Sie eine Knitr-Version vor 1.18 haben, können Sie Folgendes hinzufügen:

```{r setup, include = FALSE} knitr::knit_engines$set(python = reticulate::eng_python) ``` , siehe hier: https://rstudio.github.io/reticulate/articles/r_markdown.html#engine-setup .

Python:

Wenn dies nicht funktioniert, stellen Sie sicher, dass die Python-Verbindung außerhalb von rmarmdown/knitr läuft: py_run_string("x = 10"); py$x.

Falls dies auch nicht funktioniert, sollten Sie Folgendes überprüfen: py_available() und py_numpy_available().

Wenn es FALSE zurückgibt, versuchen Sie es mit: py_available(TRUE) zu initialisieren.

Wenn das immer noch ein Nein ist, überprüfen Sie Ihre Konfiguration: py_config()

Sie erhalten weitere Hinweise zum Problem:

Beispiele für mich waren: verschiedene Bit-Versionen von R und Python (32 vs. 64) oder irgendwie hatte ich Probleme, nachdem ich sowohl Python2.7 als auch separat Anaconda installiert hatte. 

4

Sie müssen den täglichen Rstudio-Build ( source ) verwenden und knitr, rmarkdown auf die neueste Version aktualisieren.

> packageVersion("rmarkdown")
[1] ‘1.9’
> packageVersion("knitr")
[1] ‘1.20’
3
Heisenberg