r - 将 "with"与 R6 对象一起使用

标签 r r6

我正在尝试使用诸如“with”之类的构造来允许更轻松(更懒惰?)操作 R6 对象。考虑以下(最小)示例:

library(R6)
ToyClass<-R6Class(classname = "ToyClass",
                   public = list(
                     data=data.frame(x=c(1,2,3),y=c(4,5,6)),
                     color = "red",
                     symbol = 16,
                     
                     initialize=function(mult){
                       self$data$x <- self$data * mult
                     }
                   )
)

foo <- ToyClass$new(2)
显然,我可以在我的对象中绘制数据
plot(foo$data$x,foo$data$y,col=foo$color,pch=foo$symbol)
然而,懒惰(因为我有很多这样的对象要绘制,所以复制/粘贴/编辑既耗时又容易出错)我想做
with(foo,
     plot(data$x,data$y,col=color,pch=symbol)
)
哪个不起作用:
Error in plot(data$x, data$y, col = color, pch = symbol) : 
  could not find function "plot"
我明白为什么(foo 表现为一个环境,其中未定义 plot()),但我找不到解决方案。我想如何在全局环境中查找函数名称?

最佳答案

为什么不添加一个 plot方法:

ToyClass2<-R6Class(classname = "ToyClass2",
                  public = list(
                    data=data.frame(x=c(1,2,3),y=c(4,5,6)),
                    color = "red",
                    symbol = 16,
                    plot = function() {
                      plot(self$data$x,self$data$y,col=self$color,pch=self$symbol)
                    },
                    
                    initialize=function(mult){
                      self$data$x <- self$data * mult
                    }
                  )
)

foo2 <- ToyClass2$new(2)

plot(foo2)
如果这不好,另一种方法是按如下方式设置父环境:
parent.env(foo) <- .GlobalEnv
with(foo, plot(data$x, data$y, col=color, pch=symbol))
parent.env(foo) <- emptyenv() # removes the parent environment
这甚至可以包含在一个函数中以获得更多 with - 喜欢的感觉:
with_global <- function(object, task_expr) {
  task_expr <- substitute(task_expr)
  parent.env(object) <- current_env()
  with(object, eval(task_expr))
}
with_global(foo, plot(data$x, data$y, col=color, pch=symbol))

关于r - 将 "with"与 R6 对象一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63027627/

相关文章:

r - 使用 Shiny 的应用程序创建响应式(Reactive)数据框

r - 检测前两列数字组合相同的行,选择第三列数字最大的行

r - 使用混合数据连接多个表

r - 采购 R6 类时如何解释错误 "elements..... must be named"?

R Shiny 应用程序: renderUI does not work with nested modules R6 classes

r - 如何从字母向量枚举字符串

python - 使用 R 或 python 在坐标系中绘制向量

r - 在 RStudio 的 R 包中记录 R6 类和方法

R并行: rbind parallely into separate data.帧

r - 如何告诉R6类如何使用方括号?