sba*_*lme 11 r reference-class
在尝试实现一些优化算法时,我注意到R引用类中有一些奇怪的行为.在特定的初始化方法中似乎存在一些幕后解析魔法,这使得难以使用匿名函数.下面是一个说明难度的示例:我定义了一个优化函数(f_opt),一个对其运行优化的函数,以及一个将这两个作为方法的引用类.奇怪的行为将在代码中更清晰
f_opt <- function(x) (t(x)%*%x)
do_optim_opt <- function(x) optim(x,f)
do_optim2_opt <- function(x)
{
f(x) #Pointless extra evaluation
optim(x,f)
}
optClass <- setRefClass("optClass",methods=list(do_optim=do_optim_opt,
do_optim2=do_optim2_opt,
f=f_opt))
oc <- optClass$new()
oc$do_optim(rep(0,2)) #Doesn't work: Error in function (par) : object 'f' not found
oc$do_optim2(rep(0,2)) #Works.
oc$do_optim(rep(0,2)) #Parsing magic has presumably happened, and now this works too.
Run Code Online (Sandbox Code Playgroud)
它只是我,还是看起来像其他人的错误?
R-devel中的这篇文章似乎是相关的,有解决方法
do_optim_opt <- function(x, f) optim(x, .self$f)
Run Code Online (Sandbox Code Playgroud)
似乎值得R-devel的帖子.
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |