Maybe I'm missing something, but if the following code is the content of my Rmd file
```{r}
library(reticulate)
use_virtualenv("r-reticulate")
py_available(TRUE)
```
```{python}
a = 7
print(a)
```
```{r}
py$a
```
when I Knit the file, the output for the last chunk is 7 (as expected). On the other hand, clicking the run all button in Rstudio (or running chunks one by one), results on NULL
for the last chunk.
Comparing with the R notebook example it seems like assigning something to flights
in the python chunk should make py$flights
available for R, but that doesn't seem the case.
Questions:
EDIT: Ok so after seeing the first answers here, I did update both knitr and rmarkdown to the latest version, but still had the same problem.
I added py_available(TRUE)
to my file to make sure it was initialized, still, last chunk results in 7
when knitted, but running chunks one-by-one results in
> py$a
Error in py_get_attr_impl(x, name, silent) :
AttributeError: 'module' object has no attribute 'a'
The problem is: Assigning a value to a
in the python chunk isn't doing anything to py$a
in the R environment. Maybe this "shared" environment between R and python isn't how the package is supposed to work? Also, for some extra information
> 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
To add a Python code chunk to an R Markdown document, you can use the chunk header ```{python} , e.g., ```{python} print("Hello Python!") ```
The reticulate package includes a Python engine for R Markdown that enables easy interoperability between Python and R chunks.
You can open it here in RStudio Cloud. or by typing the chunk delimiters ```{r} and ``` . When you render your . Rmd file, R Markdown will run each code chunk and embed the results beneath the code chunk in your final report.
Run Python Scripts in the RStudio IDE To get started writing Python in the RStudio IDE, go to File, New File, then Python Script. Code just as you would in an R script. The RStudio IDE provides several useful tools for your Python development: The RStudio environment pane displays the contents of Python modules.
Rmarkdown / knitr:
Running the chunks:
Running the chunks without knitting the document is not supported so far. See here: https://github.com/yihui/knitr/issues/1440 or Reticulate not sharing state between R/Python cells or Python/Python cells in RMarkdown.
Edit: Workaround by Freguglia:
"Workaround is to turn python chunks into R chunks and just wrap the whole content in the py_run_string() function, so whatever you assign in that piece of code is accessible from R by py$variable_name."
Knitting the document:
One way is to upgrade knitr
as suggested above, but you dont have to and you also dont need RStudio daily build.
If you have a version of knitr prior to 1.18, you can include:
```{r setup, include = FALSE}
knitr::knit_engines$set(python = reticulate::eng_python)
```
, see here: https://rstudio.github.io/reticulate/articles/r_markdown.html#engine-setup.
Python:
If it doesnt work ensure the python connection is running outside of rmarmdown/knitr:
py_run_string("x = 10"); py$x
.
In case that also doesnt work, you should check:
py_available()
and py_numpy_available()
.
If it returns FALSE
: Try to initialize it with: py_available(TRUE)
.
If that´s still a no - check your config:
py_config()
It will give you further hints on the problem:
Examples for me were: different bit versions of R and python (32 vs 64) or somehow i ran into trouble having installed both Python2.7 and seperately Anaconda.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With