See below.

On Wed, 15 Nov 2017, Cristina Pascual wrote:

Dear community,

I am having a class, let's say Person,

Person <-  R6Class("Person",
                    public = list(
                      idPerson = NULL,
                      name = NULL,
                      age = NULL,
                      initialize = function(idPerson = NA, name = NA, age = NA) 
{

It is a bad idea to setup default values for all your parameters in any function, but particularly so for an initialization function. A Person with NA in the idPerson field is essentially unusable, so encouraging the creation of such an object is very bad practice.

                       self$idPerson <- idPerson
                       self$name <- name
                       self$age <- age
                      }
                    ) # public

) # Person

I have created:
Person1 <- Person$new(1,'a',4)
Person2 <- Person$new(2,'b',5)

and I also have a class Community:

Community <- R6Class("Community",
                public = list(
                  e = NULL,
                  initialize = function() self$e <- Person$new()

Initializing a Community with a bogus person is as bad as the idPerson being NA. It makes a lot more sense to have the set of persons in a community be the null set than to have a minimum of one person in the community who happens to have invalid identification.

                )
)

I want to create

Community1 = List<Person>

and add Person1 and Person2 to Community1 (Community1 <- Community1$add(Person1)
                                                                                   
Community1 <- Community1$add(Person2)

????)

How can I write this with R6? I cannot find the proper example in the website.

Can anybody help me?

Thanks in advance,

You don't seem to be very familiar with either R or conventional object-oriented design. Although I am giving you a reprex below, I recommend that you avoid R6 until you are more familiar with how normal functional programming and S3 object oriented coding styles work in R. Using R6 as a crutch to avoid that learning process will only lead you to frustration and inefficient data handling. That is, this whole thing should just be a data frame.

########################################
library(R6)
Person <-  R6Class( "Person"
, public = list( idPerson = NA , name = NA , age = NA , initialize = function( idPerson

                     , name

                     , age

                     ) {

self$idPerson <- idPerson

               self$name <- name

               self$age <- age

             }
                     ) # public
                  ) # Person

Person1 <- Person$new( 1, 'a', 4 )
Person2 <- Person$new( 2, 'b', 5 )

Community <- R6Class( "Community"
, public = list( e = NULL

, addPerson = function( p ) {

   self$e <- append( self$e, p )

  }

)
                    )

Community1 <- Community$new()
Community1$addPerson( Person1 )
Community1$addPerson( Person2 )
Community1$e
#> [[1]]
#> <Person>
#>   Public:
#>     age: 4
#> clone: function (deep = FALSE)
#>     idPerson: 1
#> initialize: function (idPerson, name, age)
#>     name: a
#>
#> [[2]]
#> <Person>
#>   Public:
#>     age: 5
#> clone: function (deep = FALSE)
#>     idPerson: 2
#> initialize: function (idPerson, name, age)
#>     name: b

# Standard R approach:
Person1a <- data.frame( idPerson = 1
                      , name = "a"
                      , age = 4
                      , stringsAsFactors = FALSE
                      )
Person2a <- data.frame( idPerson = 2
                      , name = "b"
                      , age = 5
                      , stringsAsFactors = FALSE
                      )
Community1a <- rbind( Person1a, Person2a )
Community1a
#>   idPerson name age
#> 1        1    a   4
#> 2        2    b   5
########################################




        [[alternative HTML version deleted]]

Please POST IN PLAIN TEXT FORMAT. This is a setting you must make in your email program, and failure to do so will lead to us seeing different things than you send (that is, we see varying degrees of scrambling of your message if you send HTML-formatted emails). Read the Posting Guide mentioned below for more success tips.


______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.


---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnew...@dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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