如何使用R中的< - 设置插槽的值(S4)

时间:2016-05-30 07:36:03

标签: r class s4

我有一个类ob的对象markovchain

> ob
An object of class "markovchain"
Slot "states":
[1] "a" "b" "c" "d" "e"

Slot "byrow":
[1] TRUE

Slot "transitionMatrix":
   a  b  c  d  e
a  1  2  3  4  5
b  6  7  8  9 10
c 11 12 13 14 15
d 16 17 18 19 20
e 21 22 23 24 25

Slot "name":
[1] "deepak"

我的任务是创建一个方法来获取和设置name插槽的数据。

以下是在name广告位中获取数据的方法。

> setGeneric("name", function(object) standardGeneric("name"))
[1] "name"
> setMethod("name", "markovchain", 
+           function(object) {
+             out <- object@name
+             return(out)
+           }
+ )
[1] "name"

工作正常。参见

> name(ob)
[1] "deepak"

现在我的任务是在name位置设置数据。我试过这个

setGeneric("name<-", function(object, ob_name) standardGeneric("name<-"))
setMethod("name<-", "markovchain", 
          function(object, ob_name) {
            object@name <- ob_name
            object
          }
)

设置名称时我收到错误。

> name(ob) <- "apple"
Error in `name<-`(`*tmp*`, value = "apple") : 
  unused argument (value = "apple")

我不知道我做错了什么?任何帮助。

1 个答案:

答案 0 :(得分:1)

问题解决了。函数的最后一个参数的名称必须是value

setGeneric("name", function(object) standardGeneric("name"))
setMethod("name", "markovchain", function(object) {
  out <- object@name
  return(out)
})

setGeneric("name<-", function(object, value) standardGeneric("name<-"))
setMethod("name<-", "markovchain", 
          function(object, value) {
            object@name <- value
            object
          }
)

查看输出。

> name(ob)
[1] "deepak"
> name(ob) <- "value is changed"
> name(ob)
[1] "value is changed"