R:正确定义 S4 setter,以分别设置命名列表中的每个元素

问题描述 投票:0回答:1

所以我有了我的目标,让我们说

a<- new ("A")

我正在调用
a@param$stuff <- "MyStuff"
来设置该值。我知道这不是一个好的做法。
最好使用 setter。

我使用以下代码在我的类

param
中设置插槽
A
的特定属性。 如您所见,
param
是一个命名列表。
我愿意
param(a)$stuff <- "MyStuff"

我认为我做得不好,因为实际上它正在使用访问器,我可能是错的......

我接下来提供的以下方式是可以的,我认为当您设置整个列表时,但我想按元素进行操作。

param(a) <- list(stuff="MyStuff")

setClass("A",
    slots = c(
        param = "list"
    ),
    prototype = list(
        param = list(stuff = FALSE)
    )
)

# ACCESSOR
setGeneric("param", signature="x",
    function(x) standardGeneric("param")
)

setMethod("param", "A", function(x) x@param)

# SETTER
setGeneric("param<-", signature=c("x", "value"),
    function(x, value) standardGeneric("param<-")
)

setMethod("param<-", "A", function(x, value) {
    x@param <- value
    methods::validObject(x)
    x
})
r bioconductor r-s4
1个回答
0
投票
enter code here

创建一个A类的新对象

一个<- new("A")

设置整个参数列表

参数(a)<- list(stuff = "MyStuff")

在参数列表中设置单个元素

一个<- setParamElement(a, "stuff", "NewStuff") print(a@param$stuff) # Output: "NewStuff"

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.