我在Python 2.7中编写了一个函数:
# Python #
def function_py(par):
#something happens
return(value)
我希望将此函数用作R中另一个函数的参数。更准确地说,我想使用以下函数执行计算Sobol'索引:
# R #
library('sensitivity')
sobol(function_py_translated, X1,X2)
其中function_py_translated
的R等价于function_py
。
我正在尝试使用rpy2模块,对于一个简单的函数,我可以创建一个工作案例:
import rpy2.rinterface as ri
import rpy2.robjects.numpy2ri
sensitivity = importr('sensitivity')
radd = ri.baseenv.get('+')
def costfun(X):
a = X[0]
b = X[1]
return(radd(a,b))
costfunr=ri.rternalize(costfun)
X1 = robjects.r('data.frame(matrix(rnorm(2*1000), nrow = 1000))')
X2 = robjects.r('data.frame(matrix(rnorm(2*1000), nrow = 1000))')
sobinde = sensitivity.sobol(costfunr,X1,X2)
print(sobinde.__getitem__(11))
主要问题是我不得不重新定义“+”。有办法解决这个问题吗?能够在没有事先转换的情况下传递任意函数吗?我想要分析的功能要复杂得多。 非常感谢你的时间