[R] Make sure a data frame has been "fun through" a function

David Winsemius dwinsemius at comcast.net
Tue Feb 21 13:41:28 CET 2017


> On Feb 20, 2017, at 4:43 PM, stephen sefick <ssefick at 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 <ccberry at 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 at 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



More information about the R-help mailing list