在循环内使用repl_python()

时间:2019-06-06 15:27:57

标签: python r reticulate

我正在尝试运行比较测试,该测试需要从python脚本和R脚本进行多次结果迭代。使用reticulate包中的repl_python(),一切都可以进行一次迭代。但是,如果我尝试在循环中运行它以获取复制品,那么它将无法正常工作。

关于如何获取python代码块在R中的循环内工作的想法?

      ###################################################
      x <- 0
      #run this line by line 5 times, end up with x = 5
      repl_python()
      a = r.x
      a = a + 1
      exit
      x <- py$a

     #####################################
     #try to run this, and it just freezes
     #i stays at 1 and x stays at 0 
     x <- 0
     for (i in  1:5){
     repl_python()
     a = r.x
     a = a + 1
     exit
     x <- py$a
     }

2 个答案:

答案 0 :(得分:0)

我自己解决了;毫不奇怪,读取网状包装的精美印刷是关键。问题是repl_python()仅在控制台中有效。要在脚本中运行python代码行,请使用py_run_string()如下:

 x <- 0
 for (i in  1:5){
  py_run_string("a = r.x")
  py_run_string("a = a + 1")
  x <- py$a
 }
 x

希望这可以帮助其他人不会像我那样浪费时间。

答案 1 :(得分:0)

我找到了解决这个问题的方法

编写python代码并保存为.py文件

此后,使用命令source_python('path_to_code.py')运行python代码

像这样:

#### Python part #####
a = r.x
a = a + 1

#### R part #####
for (x in 1:10) {
  source_python('python_part.py')
  print(a)
}