【问题标题】:Method initialisation in R reference classesR 参考类中的方法初始化
【发布时间】:2011-09-07 09:25:18
【问题描述】:

在尝试实现一些优化算法时,我注意到 R 引用类中有一些奇怪的行为。在特定的初始化方法中似乎有一些幕后的解析魔法,这使得使用匿名函数变得困难。 这是一个说明困难的示例:我定义了一个要优化的函数(f_opt),一个在其上运行 optim 的函数,以及一个将这两个作为方法的引用类。奇怪的行为在代码中会更清楚

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. 

只有我一个人,还是其他人看起来也像一个错误?

【问题讨论】:

  • 你看过帮助(“force”)吗?
  • 我同意 Allan E 的观点。这看起来确实是惰性(非)评估的经典示例。

标签: r reference-class


【解决方案1】:

This R-devel 中的帖子似乎相关,有解决方法

do_optim_opt <- function(x, f) optim(x, .self$f)

似乎值得在 R-devel 上发帖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多