如何在Jupyter(IPython,rpy2)中获得交互式R输出,例如进度条?

如何在Jupyter(IPython,rpy2)中获得交互式R输出,例如进度条?,python,jupyter,rpy2,jupyter-lab,ipython-magic,Python,Jupyter,Rpy2,Jupyter Lab,Ipython Magic,我正在尝试在Jupyter中使用内置的R进度条txtProgressBar和%%R magic。虽然它在R控制台或RStudio中执行时确实会生成一个漂亮的动画,但它不会在Jupyter笔记本或带有rpy2扩展的实验室中生成所需的输出,而是在完成后立即打印所有步骤,这使得进度条毫无用处。两个问题: 我怎样才能让它工作? 如果还不可能,我如何在rpy2端实现这个功能?我已经知道如何在Jupyter/IPython端实现交互式输出/小部件? 以下是来自以下网站的进度条的简单片段: 但是这并不理想-我

我正在尝试在Jupyter中使用内置的R进度条txtProgressBar和%%R magic。虽然它在R控制台或RStudio中执行时确实会生成一个漂亮的动画,但它不会在Jupyter笔记本或带有rpy2扩展的实验室中生成所需的输出,而是在完成后立即打印所有步骤,这使得进度条毫无用处。两个问题:

我怎样才能让它工作? 如果还不可能,我如何在rpy2端实现这个功能?我已经知道如何在Jupyter/IPython端实现交互式输出/小部件? 以下是来自以下网站的进度条的简单片段:


但是这并不理想-我更愿意保留rpy2的Rmagic的所有优点。

应该有一种方法来实现这一点,因为R magic在您的工作环境中调用robjects.R

简而言之,当您提交%%R jupyter单元格进行评估时,会发生以下情况

对%%R行上的参数进行评估,并在评估R代码之前完成最终设置,例如,使用本地转换器、转换输入参数等。。。 %%R单元格其余部分中的R代码在R全局环境中作为一个代码字符串进行计算 运行退出安装程序并返回结果 第二步本质上是对rcapi的调用,GIL使之成为该流程中唯一的活动。但是,rpy2正在定义默认回调,将R的打印重新路由到终端/控制台,再路由到Python自己的打印,这就是为什么在调用robjects.R时看到打印

我看到,虽然有一个属性缓存_display _数据应该控制这一点,但它没有被使用。这是一个bug,原因是您正在询问Stackoverflow,并且因为大量的R代码块打印将使用比需要更多的内存,甚至耗尽所有RAM。我不知道它是一直存在还是在代码重构期间引入的;现在在这里跟踪它:


编辑:修复程序现在位于存储库中,并将成为今天可能发布的rpy2-3.0.3的一部分。

测试了3.0.3,我知道它对我有效。非常感谢。另外,除非我们删除编辑部分,否则到票证的链接将不起作用。谢谢。答案中的链接已修复。
%%R
SEQ  <- seq(1,100)
pb   <- txtProgressBar(1, 100, style=3)
TIME <- Sys.time()
for(i in SEQ){
  Sys.sleep(0.02)
  setTxtProgressBar(pb, i)
}
from rpy2.robjects import r
r("""
SEQ  <- seq(1,100)
pb   <- txtProgressBar(1, 100, style=3)
TIME <- Sys.time()
for(i in SEQ){
  Sys.sleep(0.02)
  setTxtProgressBar(pb, i)
}
""")