在RMarkdown

时间:2018-03-16 15:25:25

标签: python r r-markdown reticulate

根据设置说明,我试图让ReticulateRMarkdown工作。但是,我无法在单独的Python单元格或Python和R单元格之间共享状态,因为文档表明我应该能够。这是我的设置和输出:

单元格1(设置):

{r}
library(reticulate)
path_to_python <- "/Users/User/anaconda3/bin/python"
use_python(path_to_python)
knitr::knit_engines$set(python = reticulate::eng_python)
py_available(initialize = TRUE)

输出:

[1] TRUE

Cell 2(在Python中设置变量):

{python}
x = 2

单元格3(尝试访问R中的Python变量):

{r}
py$x

输出:

Error in py_get_attr_impl(x, name, silent) : AttributeError: module '__main__' has no attribute 'x'

单元格4(在R中设置变量):

{r}
x <- 2

Cell 5(尝试在Python中访问R变量):

{python}
r.x

输出:

Traceback (most recent call last):
  File "/var/folders/2b/dgy6vs4n3lbfy2xqwc3gqq9m0000gn/T/RtmpTqIR6P/chunk-code-108b44104ec28.txt", line 1, in <module> r.x NameError: name 'r' is not defined

Cell 6(尝试在后续Python单元中访问以前的Python变量):

{python}
x

输出:

Traceback (most recent call last):
  File "/var/folders/2b/dgy6vs4n3lbfy2xqwc3gqq9m0000gn/T/RtmpTqIR6P/chunk-code-108b44520d158.txt", line 1, in <module> x NameError: name 'x' is not defined

任何帮助或建议都会非常感激!我已经尝试将reticulate指向不同的Conda环境和Python安装而没有运气。谢谢!

2 个答案:

答案 0 :(得分:5)

我想我已经弄明白了。我误解了网状文档,认为我可以在RStudio中以交互方式在Python单元之间共享状态。仔细阅读Github上的未解决问题后,看起来RStudio集成仍在进行中。当直接使用knitr编织文档时,我得到了单元格之间共享状态的预期行为。

答案 1 :(得分:2)

这在当前的RStudio中已修复,例如1.2.1114。但是,如果您像我一样喜欢RStudio Server Pro 1.1.456,则一种解决方法是使用reticulate::repl_python()来运行python块,方法是将其粘贴到python控制台中。如果您需要在两者之间运行R块,则可以再次关闭并打开控制台-状态将得以维持。完成黑客攻击后,您可以毫无问题地编织整个文件。