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
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
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>
On Mon, 20 Feb 2017, stephen sefick wrote:
Hello,
I would like to add something to a data frame that is 1) invisible to
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
$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
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
feel like gods. We are mammals, and have not exhausted the annoying
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]]