On 11/09/2013 06:31 AM, daniel schnaider wrote:
It is my first time programming with S4 and I can't get the setter fuction
to actually change the value of the slot created by the constructor.

I guess it has to do with local copy, global copy, etc. of the variable -
but, I could't find anything relevant in documentation.

Tried to copy examples from the internet, but they had the same problem.

# The code
     setClass ("Account" ,
                representation (
                customer_id = "character",
                transactions = "matrix")
     )


     Account <- function(id, t) {
             new("Account", customer_id = id, transactions = t)
             }


     setGeneric ("CustomerID<-", function(obj,
id){standardGeneric("CustomerID<-")})

Replacement methods (in R in general) require that the final argument (the replacement value) be named 'value', so

    setGeneric("CustomerID<-",
        function(x, ..., value) standardGeneric("CustomerID"))

    setReplaceMethod("CustomerID", c("Account", "character"),
        function(x, ...., value)
    {
        x@customer_id <- value
        x
    })

use this as

   CustomerID(ac) <- "54321"


     setReplaceMethod("CustomerID", "Account", function(obj, id){
         obj@customer_id <- id
         obj
         })

         ac <- Account("12345", matrix(c(1,2,3,4,5,6), ncol=2))
         ac
         CustomerID <- "54321"
         ac

#Output
         > ac
         An object of class "Account"
         Slot "customer_id":
         [1] "12345"

         Slot "transactions":
              [,1] [,2]
         [1,]    1    4
         [2,]    2    5
         [3,]    3    6

# CustomerID is value has changed to 54321, but as you can see it does't
         > CustomerID <- "54321"

         > ac
         An object of class "Account"
         Slot "customer_id":
         [1] "12345"

         Slot "transactions":
              [,1] [,2]
         [1,]    1    4
         [2,]    2    5
         [3,]    3    6


Help!

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.



--
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to