我有一个R6
类,我想添加一个S3
的方法。我发现的文档简要提到为了使用S3
派送于R6
你必须有class = TRUE
,但我找不到应该如何完成的示例。
我确实凭经验看到,只需以以下形式编写 S3 方法s3generic.r6class
有效,但我想知道这是否确实是编写S3
方法用于R6
.
例如,假设我有一个R6
增强类list
library(R6)
R6list <- R6Class(
"R6list",
public = list(
orig = NULL,
initialize = function(x) {
self$orig <- x
}
)
)
问题1
自然,我想提供一种获取底层列表的方法,所以我想添加一个as.list
方法。添加 S3 通用和as.list
类内的公共函数?我直觉的答案是两者都添加。
R6list <- R6Class(
"R6list",
public = list(
orig = NULL,
initialize = function(x) {
self$orig <- x
},
as.list = function() {
self$orig
}
)
)
as.list.R6list <- function(x, ...) {
x$as.list()
}
所以现在如果我有一个对象mylist <- R6list$new(as.list(letters[1:5]))
我可以打电话as.list(mylist)
or mylist$as.list()
。其中一个比另一个更受青睐吗?
问题2
写一篇有什么特别的吗S3
方法用于R6
类,或者我上面写的内容是否足够且正确?我不确定是否S3
方法必须写在类定义之外,或者如果R6
以某种方式提供了一种写作方式S3
其中的方法,以便本地化与该类相关的所有代码。
我问了Winston Chang的作者R6
, 对这个在 Github 上 http://github.com/wch/R6/issues/42。据他介绍,上面问题1中提供的代码是为R6类编写S3方法的正确方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)