如何在R6类实例外部修改公共方法且无需重新初始化?
解决R6实例动态修改公共方法的问题
你遇到的语法错误是因为不能通过函数调用 <- 值的形式给实例方法赋值,正确的做法是直接给实例的方法成员赋值,无需添加括号。
直接修改实例方法的正确写法
library(R6) Simple <- R6Class( "Simple", public = list( dt = mtcars, my.print = function (){ print(self$dt$mpg) } ) ) s <- Simple$new() s$my.print() # 更新数据 s$dt <- iris # 直接为实例的my.print成员赋值新函数 s$my.print <- function() { print(self$dt$Species) } # 调用修改后的方法 s$my.print()
更优雅的自动适配方案
如果希望方法能根据存储的数据自动调整输出逻辑,无需手动修改方法,可以在my.print中加入判断逻辑:
library(R6) Simple <- R6Class( "Simple", public = list( dt = mtcars, my.print = function (){ # 根据数据列自动判断输出内容 if ("mpg" %in% colnames(self$dt)) { print(self$dt$mpg) } else if ("Species" %in% colnames(self$dt)) { print(self$dt$Species) } else { print("未找到目标列") } } ) ) s <- Simple$new() s$my.print() # 输出mtcars的mpg列 s$dt <- iris s$my.print() # 自动输出iris的Species列
内容的提问来源于stack exchange,提问作者IVIM
相关产品推荐
相关产品推荐

