【问题标题】:How to find the name of an instantiation of an object in a R6 class?如何在 R6 类中找到对象实例化的名称?
【发布时间】:2017-11-18 01:26:59
【问题描述】:

ann <- Person$new("Ann", "black")

在上面的例子中(来自this Introduction),我如何得到“ann”?

例如,我需要一个返回“ann”的方法 ann$getName。

【问题讨论】:

  • 你为什么需要这个?
  • 因为我假设您的意思是您分配对象的 var 名称 - 而不是“名称”的值(您可以通过键入 ann$name 获得)
  • 是的,我需要分配对象的 var 名称。我需要它来创建涉及我的 R6 类的命令日志。
  • 你的意思是obj <- get("ann")
  • 我认为您或许应该提供更多有关您尝试使用日志记录的代码。你的要求对我来说听起来像是代码味道,但可能是我并不真正了解你想要什么

标签: r class r6


【解决方案1】:

我正在尝试做同样的事情,所以也许我可以澄清这个问题。目标(对我来说)是给班级的用户一些反馈。类似的东西:

Person <- R6Class("Person",
  public = list(
    name = NULL,
    hair = NULL,
    initialize = function(name = NA, hair = NA) {
      self$name <- name
      self$hair <- hair
       },

    do_something_very_long=function(){
      whoami <- self$getInstanceName() ## $getInstanceName() is the method I need to write !
      message(paste("Please wait, processing object",whoami))
      # Do a very long calculation... 
     }
  )
)

然后我会在一个类似的脚本中运行它

#File batch_processing.R
first_in_line<-Person$new("Alice","Black")
next_customer<-Person$new("Bob","Red")
VIP<-Person$new("Charlie","Brown")
# etc ...

first_in_line$do_something_very_long()
next_customer$do_something_very_long()
VIP$do_something_very_long()
# etc ...

所以,我的(名义上的)用户将启动 batch_processing.R,也许是

$ R ~/batch_processing.R 

R> source("batch_processing.R")

并在脚本运行时观察不会发生太多事情。因此,我想要一些反馈,以便当用户喝完咖啡回来时,他可以查看屏幕并看到计算机正忙于处理 VIP 或 next_customer。

显然 - 一种方法是为每个对象显式地赋予唯一标识符(在本例中为 $name)。然而,在我的实际应用案例中,这并没有多大意义,或者会重复对象名称(“模型 1”、“模型 2”...),这有点浪费!

【讨论】:

  • 等等——我真的不能那样做,因为多个名称可能会绑定到同一个对象(在这种情况下是 R6 对象),对吧? (参见adv-r.hadley.nz/names-values.html)更一般地说,有没有办法获取指向给定对象的所有符号的列表?
猜你喜欢
  • 2022-08-04
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多