RMarkdown中的R/Python单元格或Python/Python单元格之间无法共享状态

11

我正在尝试按照设置说明在RMarkdown中让Reticulate正常工作。然而,我无法在不同的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

第二个单元格(在Python中设置变量):

{python}
x = 2

第三个单元格(尝试在R中访问Python变量):

{r}
py$x

输出:

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

第四个单元格(在R中设置变量):

{r}
x <- 2

第五个单元格(尝试在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

第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安装,但没有成功。谢谢!

我不确定为什么你在第一次调用Python后看到了错误消息。我有一台装有Python2和Python3的Mac电脑。当我使用Python2时,我会遇到类似于你的错误,但是当我使用Python3时,文档可以正常编织而无需任何问题。我没有Python专业知识 - 当一个人调用Python时是否有启动文件被运行? - Fred Boehm
2个回答

6

我想我已经弄清楚了。我误解了reticulate文档,认为我可以在RStudio的Python单元格之间交互共享状态。在Github上查看了开放问题后,似乎RStudio集成仍在进行中。当直接使用knitr编织文档时,我可以得到预期的单元格之间共享状态行为。


3
这个问题在当前的RStudio版本中已经得到解决,例如 1.2.1114。但如果像我一样被困在RStudio Server Pro 1.1.456中,可以通过使用 reticulate::repl_python() 来运行Python代码块,将它们复制并粘贴到Python控制台中。如果需要在其中运行一个R代码块,您可以关闭并重新打开控制台 - 状态将得以保留。完成所有操作后,您可以毫无问题地编织整个文件。

这太棒了,让人惊讶的是为什么没有更多人谈论它。 - daknowles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接