Re: [R] S4; Setter function is not chaning slot value as expected

2013-11-10 Thread daniel schnaider
It is excellent. thanks!


On Sun, Nov 10, 2013 at 12:49 PM, Martin Morgan  wrote:

> On 11/09/2013 11:31 PM, Hadley Wickham wrote:
>
>> Modelling a mutable entity, i.e. an account, is really a perfect
>> example of when to use reference classes.  You might find the examples
>> on http://adv-r.had.co.nz/OO-essentials.html give you a better feel
>> for the strengths and weaknesses of R's different OO systems.
>>
>
> Reference classes provide less memory copying and a more familiar
> programming paradigm but not necessarily fantastic performance, as
> illustrated here
>
> http://stackoverflow.com/questions/18677696/stack-
> class-in-r-something-more-concise/18678440#18678440
>
> and I think elsewhere on this or the R-devel list (sorry not to be able to
> provide a more precise recollection).
>
> Martin
>
>
>
>
>> Hadley
>>
>> On Sat, Nov 9, 2013 at 9: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<-")})
>>>  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,]14
>>>  [2,]25
>>>  [3,]36
>>>
>>> # 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,]14
>>>  [2,]25
>>>  [3,]36
>>>
>>>
>>> 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
>



-- 
Daniel Schnaider

SP Phone:  +55-11-9.7575.0822


d...@scaigroup.com
skype dschnaider
Linked In: http://www.linkedin.com/in/danielschnaider

w ww.scaigroup.com

Depoimentos de clientes 

Casos de Sucesso & Referências 

SCAI Group no Facebook 

SCAI Group no Twitter 

SCAI Group no Google Plus 

[[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.


Re: [R] S4; Setter function is not chaning slot value as expected

2013-11-10 Thread daniel schnaider
Thanks Martin. It worked well.
Two new questions related to the same subject.

1) Why create this semantic of a final argument name specifically names
value?
2) Regarding performance. When CustomerID(ac) <- "54321" runs, does it only
change the slot from whatever it was to 54321, or it really create another
object and change all the value of all slots, keeping technically all the
other values equal and changing 54321?

thanks..


On Sat, Nov 9, 2013 at 4:20 PM, Martin Morgan  wrote:

> 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,]14
>>  [2,]25
>>  [3,]36
>>
>> # 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,]14
>>  [2,]25
>>  [3,]36
>>
>>
>> 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
>



-- 
Daniel Schnaider

SP Phone:  +55-11-9.7575.0822


d...@scaigroup.com
skype dschnaider
Linked In: http://www.linkedin.com/in/danielschnaider

w ww.scaigroup.com

Depoimentos de clientes 

Casos de Sucesso & Referências 

SCAI Group no Facebook 

SCAI Group no Twitter 

SCAI Group no Google Plus 

[[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.


Re: [R] S4; Setter function is not chaning slot value as expected

2013-11-10 Thread Martin Morgan

On 11/09/2013 11:31 PM, Hadley Wickham wrote:

Modelling a mutable entity, i.e. an account, is really a perfect
example of when to use reference classes.  You might find the examples
on http://adv-r.had.co.nz/OO-essentials.html give you a better feel
for the strengths and weaknesses of R's different OO systems.


Reference classes provide less memory copying and a more familiar programming 
paradigm but not necessarily fantastic performance, as illustrated here


http://stackoverflow.com/questions/18677696/stack-class-in-r-something-more-concise/18678440#18678440

and I think elsewhere on this or the R-devel list (sorry not to be able to 
provide a more precise recollection).


Martin




Hadley

On Sat, Nov 9, 2013 at 9: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<-")})
 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,]14
 [2,]25
 [3,]36

# 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,]14
 [2,]25
 [3,]36


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.


Re: [R] S4; Setter function is not chaning slot value as expected

2013-11-10 Thread Martin Morgan

On 11/10/2013 03:54 AM, daniel schnaider wrote:

Thanks Martin. It worked well.
Two new questions related to the same subject.

1) Why create this semantic of a final argument name specifically names value?


I do not know. It is a requirement of replacement methods in R in general, not 
just S4 methods. See section 3.4.4 of RShowDoc("R-lang").



2) Regarding performance. When CustomerID(ac) <- "54321" runs, does it only
change the slot from whatever it was to 54321, or it really create another
object and change all the value of all slots, keeping technically all the other
values equal and changing 54321?


Copying is tricky in R. It behaves as though a copy has been made of the entire 
object. Whether a copy is actually made, or just marked as necessary on 
subsequent modification, requires deep consideration of the code. This is the 
way R works, not just the way S4 classes work.


If instead of a single account you modelled 'Accounts', i.e., all accounts, then 
updating 1000 account id's would only make one copy, whereas if you model each 
account separately this would require 1000 copies.


Martin



thanks..


On Sat, Nov 9, 2013 at 4:20 PM, Martin Morgan mailto:mtmor...@fhcrc.org>> wrote:

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,]14
  [2,]25
  [3,]36

# 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,]14
  [2,]25
  [3,]36


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




--
Daniel Schnaider

SP Phone:  +55-11-9.7575.0822


d...@scaigroup.com 
skype dschnaider
Linked In: http://www.linkedin.com/in/danielschnaider

w ww.scaigroup.com 

Depoimentos de clientes 

Casos de Sucesso & Referências 

SCAI Group no Facebook 

SCAI Group no Twitter 

SCAI Group no Google Plus 




--
Computational Biology / Fred

Re: [R] S4; Setter function is not chaning slot value as expected

2013-11-09 Thread Hadley Wickham
Modelling a mutable entity, i.e. an account, is really a perfect
example of when to use reference classes.  You might find the examples
on http://adv-r.had.co.nz/OO-essentials.html give you a better feel
for the strengths and weaknesses of R's different OO systems.

Hadley

On Sat, Nov 9, 2013 at 9: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<-")})
> 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,]14
> [2,]25
> [3,]36
>
> # 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,]14
> [2,]25
> [3,]36
>
>
> 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.



-- 
Chief Scientist, RStudio
http://had.co.nz/

__
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.


Re: [R] S4; Setter function is not chaning slot value as expected

2013-11-09 Thread Martin Morgan

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,]14
 [2,]25
 [3,]36

# 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,]14
 [2,]25
 [3,]36


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.


Re: [R] S4; Setter function is not chaning slot value as expected

2013-11-09 Thread Simon Zehnder
If you want to set a slot you have to refer to it:

ac@CustomerID <- “54321” 

or you use your setter:

ac <- CustomerID(ac, “54321”)

What you did was creating a new symbol CustomerID referring to the String 
“54321”
CustomerID <- “54321”
CustomerID
[1] “54321”

Best

Simon

On 09 Nov 2013, at 15:31, 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<-")})
>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,]14
>[2,]25
>[3,]36
> 
> # 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,]14
>[2,]25
>[3,]36
> 
> 
> 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.

__
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.


[R] S4; Setter function is not chaning slot value as expected

2013-11-09 Thread daniel schnaider
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<-")})
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,]14
[2,]25
[3,]36

# 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,]14
[2,]25
[3,]36


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.