我正在尝试使用rpy2在python中调用stats.optim R函数。但是,我遇到以下错误:
RRuntimeError: Error in (function (par, fn, gr = NULL, ..., method = c("Nelder-Mead", : objective function in optim evaluates to length 0 not 1
我从这里主要遵循了优化函数示例: http://rpy.sourceforge.net/rpy2/doc-2.2/html/rinterface.html)。请参阅“从R调用Python函数”一节 这是我的代码:
from rpy2.robjects import r
import rpy2.robjects as robjects
import rpy2.rinterface as ri
# Function to be optimized, v1 is a 1-dimensional numpy array and m1 is n
# by 3 numpy matrix
def f(beta):
return np.sum(np.square((np.divide(v1,np.matmul(m1,beta))-1)))
# convert python function to R function
r_f = ri.rternalize(f)
Beta = robjects.FloatVector((0,1,0))
res = r.optim(Beta, r_f)
我确保所定义的函数f是正确的,并且可以将其转换为r函数对象。例如,当我调用r_f(Beta)时,它将返回正确的结果。我想知道是否有办法避免这种问题。我刚刚了解了rpy2,任何建议都值得赞赏!预先谢谢你
答案 0 :(得分:0)
这很可能是因为未定义由于np
,v1
和m1
而失败的目标函数。
rpy2
中也可能存在一个buglet,因为该错误通常应作为某种警告来出现。