- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 R6 类和泛型方法 (UseMethod
) 将不同类的小对象(Small1、MyClassA 和 Small2、MyClassB)添加到 MyClass 的 Big 实例中的公共(public)列表(MyListA 和 MyListB)。
这在创建时有效(Big 是使用 Small1 和 -2 创建的),但之后会失败:
> Big$AddObj(Small3) #produces:
Error in UseMethod("AddObj", x) : no applicable method for 'AddObj'
applied to an object of class "c('MyClassA', 'R6')"
require('R6')
MyClass <- R6Class("MyClass",
public = list(
initialize = function(...) {
for (x in list(...)) {AddObj(x)}
},
AddObj = function(x) {UseMethod("AddObj", x)},
AddObj.MyClassA = function(x) {
MyListA <<- c(MyListA, list(x))},
AddObj.MyClassB = function(x) {
MyListB <<- c(MyListB, list(x))},
AddObj.default = function(x) {
otherObjects <<- c(otherObjects, list(x))},
Show = function() {
print(methods(AddObj))
if (length(MyListA)>0) print(MyListA)
if (length(MyListB)>0) print(MyListB)
},
MyListA = list(),
MyListB = list(),
otherObjects = list()
)
)
MyClassA <- R6Class("MyClassA",
public = list(
name = NA,
initialize = function(input) {
if (!missing(input)) name <<- as.character(input)}
))
MyClassB <- R6Class("MyClassB",
public = list(
name = NA,
initialize = function(input) {
if (!missing(input)) name <<- as.character(input)}
))
Small1 <- MyClassA$new("MyName1")
Small2 <- MyClassB$new("MyName2")
Big <- MyClass$new(Small1, Small2)
Big$Show()
Small3 <- MyClassA$new("MyNewName")
Big$AddObj(Small3)
最佳答案
R6 对象中没有 S3 调度,但您可以使用 if-else 语句,如下所示:
library('R6')
MyClass <- R6Class("MyClass",
portable = FALSE,
public = list(
initialize = function(...) {
for (x in list(...)) {AddObj(x)}
},
AddObj = function(x) {
if (inherits(x, "MyClassA"))
MyListA <<- c(MyListA, list(x))
else if (inherits(x, "MyClassB"))
MyListB <<- c(MyListB, list(x))
else
otherObjects <<- c(otherObjects, list(x))
},
Show = function() {
if (length(MyListA)>0) print(MyListA)
if (length(MyListB)>0) print(MyListB)
},
MyListA = list(),
MyListB = list(),
otherObjects = list()
)
)
MyClassA <- R6Class("MyClassA",
portable = FALSE,
public = list(
name = NA,
initialize = function(input) {
if (!missing(input)) name <<- as.character(input)}
))
MyClassB <- R6Class("MyClassB",
portable = FALSE,
public = list(
name = NA,
initialize = function(input) {
if (!missing(input)) name <<- as.character(input)}
))
Small1 <- MyClassA$new("MyName1")
Small2 <- MyClassB$new("MyName2")
Big <- MyClass$new(Small1, Small2)
Big$Show()
Small3 <- MyClassA$new("MyNewName")
Big$AddObj(Small3)
Big$Show()
portable=FALSE
设置,这是刚刚添加到R6的开发版本中的东西。见
https://github.com/wch/R6/issues/16了解更多信息。
$
调用该函数,则不会使用它。 ,如
Big$AddObj(Small3)
.您可以通过以下方式使用它:
eval(quote(AddObj(Small3)), envir = Big)
,但这显然不是很好。最好使用 if-else 并使用
inherits()
.
关于R R6 类和 UseMethod/泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25138436/
对比以下两个代码片段: 1) > y g g.numeric g(10) [1] 2 2) > x g g.numeric g(10) [1] 1 在第一个片段中,g.numeric 的自
试图理解为什么 rownames = FALSE 没有从 Test 传递到 Test.list? Test = function( object , rownames = FALSE , ... )
我有一个数据框 IRC_DF,我想在输入对象上创建一个迭代器到词汇表,为此我尝试这样做: it_train <- itoken(IRC_DF$Raison.Reco, preprocessor = p
所以我在 R Studio 中运行下面的代码并收到此错误: Error in UseMethod("tbl_vars") : no applicable method for 'tbl_vars' a
我想弄清楚 R 的 UseMethod找到一个方法,一旦它弄清楚它在寻找什么(即函数 MyGeneric( x ) 用类 MyClass: MyGeneric.MyClass 的 x 调用) 具体涉及
我想使用 R6 类和泛型方法 (UseMethod) 将不同类的小对象(Small1、MyClassA 和 Small2、MyClassB)添加到 MyClass 的 Big 实例中的公共(publi
我正在尝试创建 R 包的第一次尝试。我有下面的一些功能。 #' @export overview <- function(x, ...) { UseMethod("overview") } ov
我希望能够调度到 environment 中定义的方法.这将允许我为 proto 定义多态方法。对象(proto 对象又继承自 environment 类)。例如。: x x$foo(list())
我正在尝试 roadoi 从 R 访问 Unpaywall,但无论我尝试查询什么,我都会收到以下响应: Error in UseMethod("http_error") : no applicable
当我尝试在 test_dir 函数中定义路径时,它会提示错误: Error in UseMethod("xml_add_child") : no applicable method for 'xml_
如果需要根据R对象的类以不同的方式处理R对象,则可以在单个函数中使用if和else: foo getS3method('foo','list') function (x) { # Foo the
在 R 中,我准备了多个 ggplot2 图形,它们被保存到这样的变量中: flashplot multiplot(p1, p2, p3, p4, cols=2) Error in UseMetho
我尝试了针对this question而发布的答案,但是错误没有改变。我试图以相同的方式预处理训练集和测试集。它们来自两个不同的文件,我不确定我的老师是否会把我混合在一起,所以在拆分它们之前进行预处理
我尝试使用 raster 包的提取方法从 Raster* 对象中提取值。 RStudioPrompt> jpnpe search() [1] ".GlobalEnv" **"pac
我是 R 的新手,目前正在完成一项处理网络抓取的任务。 我应该读入此网页中的所有句子:https://www.cs.columbia.edu/~hgs/audio/harvard.html 这是我当前
我是 R 的新手,目前正在完成一项处理网络抓取的任务。 我应该读入此网页中的所有句子:https://www.cs.columbia.edu/~hgs/audio/harvard.html 这是我当前
所以我有这个数据集 # A tibble: 268 x 1 `Which of these social media platforms do you have an account in ri
在我的玩具包中,我定义了 %+%运算符作为 paste0() 的别名.试图减少与其他包的干扰,我通过以下方式实现: `%+%` <- function(...) UseMethod("%+%") `%
我正在尝试使用ggsave()保存绘图。我输入以下内容: library(ggplot2) Test = data.frame("X" = seq(1, 10, 1), "Y" = 2*seq(1,
我是一名优秀的程序员,十分优秀!