> On Feb 20, 2017, at 4:43 PM, stephen sefick <ssef...@gmail.com> wrote: > > Hello All, > > I am writing a package. I would like to encourage the user to look at the > data to rectify errors with function A before utilizing function B to code > these data as binary. I thought about solving this problem by adding a > "flag" in the attributes that could be used downstream in B, and have a > function that adds this "flag" if the user is convinced that everything is > okay. This would allow the user to utilize their data as is, if error > checking is not necessary. Maybe I am overthinking this. Thanks again. > kindest regards,
Still not clear what is needed but there is an `attr<-` function. You might get waht you wnat by having function A add an attribute which is then checked by B. -- David > > Stephen > > On Mon, Feb 20, 2017 at 6:24 PM, Charles C. Berry <ccbe...@ucsd.edu> wrote: > >> On Mon, 20 Feb 2017, stephen sefick wrote: >> >> Hello, >>> >>> I would like to add something to a data frame that is 1) invisible to the >>> user, 2) has no side effects, and 3) I can test for in a following >>> function. Is this possible? I am exploring classes and attributes and I >>> have thought about using a list (but 1 and 2 not satisfied). Any help >>> would >>> be greatly appreciated. >>> >>> >> Depends on exactly what you mean by `invisible' and `side effects'. >> >> You can do this (but I am not necessarily recommending this): >> >> add.stuff <- function(x,...){ >>> >> + class(x)<- c("more.stuff",class(x)) >> + attr(x,"stuff")<- list(...) >> + x} >> >>> >>> >> And printing and model functions will be unaffected: >> >> df <- data.frame(a=1:3,b=letters[1:3]) >>> df2 <- add.stuff(df,comment="wow", length="3 rows") >>> df2 >>> >> a b >> 1 1 a >> 2 2 b >> 3 3 c >> >>> attr(df2,"stuff") >>> >> $comment >> [1] "wow" >> >> $length >> [1] "3 rows" >> >> all.equal(lm(a~b,df),lm(a~b,df2)) # only call should differ >>> >> [1] "Component “call”: target, current do not match when deparsed" >> >>> >>> >> And if you need some generics to take account of the "stuff" attribute, >> you can write the methods to do that. >> >> --- >> >> Another solution is to put your data.framne in a package and then have >> other objects hold the 'stuff' stuff. Once your package is loaded or >> imported, the user will have access to the data in a way that might be said >> to be `invisible' in ordinary usage. >> >> --- >> >> But seriously, you should say *why* you want to do this. There are >> probably excellent solutions that do not involve directly altering the >> data.frame and may not involve putting together a package. >> >> HTH, >> >> Chuck > > > > > -- > Let's not spend our time and resources thinking about things that are so > little or so large that all they really do for us is puff us up and make us > feel like gods. We are mammals, and have not exhausted the annoying little > problems of being mammals. > > -K. Mullis > > "A big computer, a complex algorithm and a long time does not equal > science." > > -Robert Gentleman > > [[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. David Winsemius Alameda, CA, USA ______________________________________________ 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.