2016-05-30 8 views
1

markovchainのオブジェクトobがあります。< - in Rを使用してスロット(S4)の値を設定する方法

> 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 <- [email protected] 
+    return(out) 
+   } 
+) 
[1] "name" 

正常に動作しています。

> name(ob) 
[1] "deepak" 

ここで私の仕事はnameスロットのデータを設定することです。私はこれを試しました

setGeneric("name<-", function(object, ob_name) standardGeneric("name<-")) 
setMethod("name<-", "markovchain", 
      function(object, ob_name) { 
      [email protected] <- ob_name 
      object 
      } 
) 

名前を設定中にエラーが発生しました。

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

私は間違っていますか?助けてください。

答えて

1

問題は解決しました。関数の最後の引数の名前はvalueでなければなりません。

setGeneric("name", function(object) standardGeneric("name")) 
setMethod("name", "markovchain", function(object) { 
    out <- [email protected] 
    return(out) 
}) 

setGeneric("name<-", function(object, value) standardGeneric("name<-")) 
setMethod("name<-", "markovchain", 
      function(object, value) { 
      [email protected] <- value 
      object 
      } 
) 

出力を参照してください。

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

'methods :: setReplaceMethod'を使用することもできます。しかし、それはあなたが現在行っていることと実際には違いはありません。 – Sebastian

関連する問題