rpy2:如何从 Python 回调函数 return 向量到 R?
rpy2: How to return vector to R from Python callback function?
我正在尝试从 Python 调用 R 包中的函数。 R 函数需要一个回调函数,该函数接受一个值向量,进行一些计算,并且 return 是一个结果向量。
我能够使回调正常工作,但前提是它 return 是标量。所有 return 多个值的尝试都会导致 rpy2 抛出 ValueError。
从rpy2.robject开始,我尝试了 FloatVectors 和 IntVectors。我还尝试将我的 Python 列表转换为 numpy 数组或 pandas 数据帧,然后使用 rpy2 的接口进行转换。 None 工作。
明确地说,我能够成功地使用所有这些方法来创建我可以从 Python 传递到 R 函数的参数列表的对象。我只在尝试 return 来自 Python 回调的向量时收到错误。
我已将问题归结为一个简单的测试。这是接受然后调用回调函数的 R 代码:
Test <-
function(cb) {
cb()
}
而且,这是我用来调用 R 代码的 Python 代码:
import rpy2.rinterface as ri
from rpy2 import robjects
robjects.r('source("Test.R")')
test = robjects.r['Test']
@ri.rternalize
def cb_test():
return robjects.FloatVector([1.0, 2.0, 3.0])
test(cb_test)
预期结果:
FloatVector with 3 elements.
1.000000 2.000000 3.000000
实际结果:
<class 'ValueError'>: [1] 1 2 3
提前感谢任何能找出我做错了什么的人。
问题也可以简单地重现:
import rpy2.rinterface as ri
ri.initr()
@ri.rternalize
def cb_test():
return ri.FloatSexpVector([1.0, 2.0, 3.0])
cb_test()
这似乎是一个问题,现在在这里跟踪:https://bitbucket.org/rpy2/rpy2/issues/538/
编辑:代码库中有一个初步修复,通常会在周末发布 rpy2 的错误修复版本。
我正在尝试从 Python 调用 R 包中的函数。 R 函数需要一个回调函数,该函数接受一个值向量,进行一些计算,并且 return 是一个结果向量。
我能够使回调正常工作,但前提是它 return 是标量。所有 return 多个值的尝试都会导致 rpy2 抛出 ValueError。
从rpy2.robject开始,我尝试了 FloatVectors 和 IntVectors。我还尝试将我的 Python 列表转换为 numpy 数组或 pandas 数据帧,然后使用 rpy2 的接口进行转换。 None 工作。
明确地说,我能够成功地使用所有这些方法来创建我可以从 Python 传递到 R 函数的参数列表的对象。我只在尝试 return 来自 Python 回调的向量时收到错误。
我已将问题归结为一个简单的测试。这是接受然后调用回调函数的 R 代码:
Test <-
function(cb) {
cb()
}
而且,这是我用来调用 R 代码的 Python 代码:
import rpy2.rinterface as ri
from rpy2 import robjects
robjects.r('source("Test.R")')
test = robjects.r['Test']
@ri.rternalize
def cb_test():
return robjects.FloatVector([1.0, 2.0, 3.0])
test(cb_test)
预期结果:
FloatVector with 3 elements.
1.000000 2.000000 3.000000
实际结果:
<class 'ValueError'>: [1] 1 2 3
提前感谢任何能找出我做错了什么的人。
问题也可以简单地重现:
import rpy2.rinterface as ri
ri.initr()
@ri.rternalize
def cb_test():
return ri.FloatSexpVector([1.0, 2.0, 3.0])
cb_test()
这似乎是一个问题,现在在这里跟踪:https://bitbucket.org/rpy2/rpy2/issues/538/
编辑:代码库中有一个初步修复,通常会在周末发布 rpy2 的错误修复版本。