Hi Cristina, You can try this: > Community <- R6Class("Community", public = list( e = NULL, initialize = function() { self$e <- list() }, add = function( person ) { self$e[[ length(self$e) + 1]] <<- person } ) )
> crowd <- Community$new() > crowd$add(Person1) > crowd$add(Person2) > crowd$e HTH, Eric On Thu, Nov 16, 2017 at 9:55 AM, Jeff Newmiller <jdnew...@dcn.davis.ca.us> wrote: > 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/posti >> ng-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/posti > ng-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ 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.