Mark, I do understand this desire, though notably, if selecting a single element from one of these custom vectors gave you a normal value, if would be safe, right? e.g. if the [ method, etc checked if the index length is one, and returned the non-compressed value if it was, as an off-the-cuff possibility.
Also, I do feel compelled to say that I'm working with R-core (Luke Tierney primarily) on low-level support for this kind of data-storage abstraction that would let you create custom vector/matrix storage mechanisms that still behave themselves as atomic vectors. See https://www.r-project.org/dsc/2016/slides/customvectors.html for my initial pitch and https://svn.r-project.org/R/branches/ALTREP/ <https://svn.r-project.org/R/branches/ALTREP/> for the work-in-progress branch. We hope to merge that in after the release of 3.4, but there's no firm date as some work on our part and discussion amongst r-core remains before it can happen. So in the future, I hope you'll be able to do this in ways that R sees as actual atomic vectors. They do have to be define in C-code currently, though. ~G On Sun, Mar 5, 2017 at 5:09 PM, <mark.braving...@data61.csiro.au> wrote: > I can't comment for Da, but one example where the ability to make 'if' > generic would have been desirable: > > A couple of years ago I wrote S3 classes and methods for 1-byte integers > and logicals stored as raw vectors, in order to handle massive amounts of > genetic data (by the standards of the day). Everything worked pretty > nicely, ie I could "methodize" just about everything I needed--- except > if-statements, which would fail to respect eg my definitions of NA. [ The > precise details elude me, but if() was untrustworthy. ] To use 'if()', I > had to remember to "typecast", which was prone to "user error". > > Whether this kind of thing is worth the "risk", is another matter. > > cheers > Mark > > Mark Bravington > CSIRO Marine Lab > Hobart > Australia > > ________________________________________ > From: R-devel [r-devel-boun...@r-project.org] on behalf of Gabriel Becker > [gmbec...@ucdavis.edu] > Sent: 06 March 2017 11:43 > To: Da Zheng > Cc: r-devel@r-project.org > Subject: Re: [Rd] can we override "if" in R? > > Da, > > I've been following this thread and I'm still confused as to exactly what > you want/why you want it. > > I'm probably just missing some context here, but, If() doesn't operate on > matrices, generally. Can you give an example of the type of code you want > to have continue to run that requires if operation *directly* on one of > your matrix objects, as opposed, say, to a value pulled out from it, or the > dot-product of two vectors in your system, both of which would be values > (scalars) not matrices. > > Now ifelse(), is of course, a different beast altogether, and would need to > be overloaded within your system, I imagine. > > Best, > ~G > > On Sun, Mar 5, 2017 at 12:52 PM, Da Zheng <zhengda1...@gmail.com> wrote: > > > On Sun, Mar 5, 2017 at 2:50 PM, Michael Lawrence > > <lawrence.mich...@gene.com> wrote: > > > > > > > > > On Sat, Mar 4, 2017 at 12:36 PM, Da Zheng <zhengda1...@gmail.com> > wrote: > > >> > > >> In my case, I create a new type of matrices and override matrix > > >> operations in R for these matrices. > > >> My goal is to make the system as transparent as possible, which means > > >> my system should execute the existing R code without modification. > > >> The problem is that when data is in my own vectors or matrices, "if" > > >> or "while" can't access their values unless we explicitly convert them > > >> into R objects. But this means users need to modify the existing code. > > >> So I hope I can override "if", "while", etc to access data in my own > > >> vectors and matrices directly. > > >> Does this sound reasonable? > > >> > > > > > > Would you really need the alternate representation for scalar logicals? > > > > > > I can see a case in the deferred evaluation context, although it would > be > > > problematic wrt side effects unless the deferral is complete. > > This is exactly why I want to use my own matrix objects and redefine > > "if" for the matrices. In my framework, all matrices are read-only, so > > there isn't side effect. > > > > Best, > > Da > > > > > > > > > > > >> > > >> Best, > > >> Da > > >> > > >> On Sat, Mar 4, 2017 at 3:22 PM, Michael Lawrence > > >> <lawrence.mich...@gene.com> wrote: > > >> > I'm curious as to precisely why someone would want to do this. > > >> > > > >> > On Sat, Mar 4, 2017 at 11:49 AM, Da Zheng <zhengda1...@gmail.com> > > wrote: > > >> >> > > >> >> I'm just curious. Why making "if" generic is even more dangerous? > > >> >> > > >> >> Best, > > >> >> Da > > >> >> > > >> >> On Sat, Mar 4, 2017 at 1:22 PM, Gábor Csárdi < > csardi.ga...@gmail.com > > > > > >> >> wrote: > > >> >> > `!` is a generic, `if` is not. You can define an `if` that is > > >> >> > generic, > > >> >> > but this might be even more dangerous.... > > >> >> > > > >> >> > ❯ `if` <- function(a, b, c) UseMethod("if") > > >> >> > ❯ `if.default` <- function(a,b,c) base::`if`(a, b, c) > > >> >> > ❯ `if.foo` <- function(a, b, c) FALSE > > >> >> > ❯ a <- structure(42, class = "foo") > > >> >> > > > >> >> > ❯ if (a) TRUE else FALSE > > >> >> > [1] FALSE > > >> >> > > > >> >> > ❯ if (1) TRUE else FALSE > > >> >> > [1] TRUE > > >> >> > > > >> >> > Gabor > > >> >> > > > >> >> > On Sat, Mar 4, 2017 at 5:47 PM, Da Zheng <zhengda1...@gmail.com> > > >> >> > wrote: > > >> >> >> Thanks. > > >> >> >> Can I override it for a specific class? > > >> >> >> I can do that for operators such as "!". For example, "!.fm" > works > > >> >> >> for > > >> >> >> objects of the class "fm". > > >> >> >> It seems I can't do the same for "if". > > >> >> >> > > >> >> >> Best, > > >> >> >> Da > > >> >> >> > > >> >> >> On Sat, Mar 4, 2017 at 12:41 PM, Gábor Csárdi > > >> >> >> <csardi.ga...@gmail.com> > > >> >> >> wrote: > > >> >> >>> You can. Perhaps needless to say, be careful with this. > > >> >> >>> > > >> >> >>> ❯ `if` <- function(...) FALSE > > >> >> >>> ❯ if (TRUE) TRUE else FALSE > > >> >> >>> [1] FALSE > > >> >> >>> > > >> >> >>> G. > > >> >> >>> > > >> >> >>> On Sat, Mar 4, 2017 at 5:36 PM, Da Zheng < > zhengda1...@gmail.com> > > >> >> >>> wrote: > > >> >> >>>> Hello, > > >> >> >>>> > > >> >> >>>> I heard we can override almost everything in R. Is it possible > > to > > >> >> >>>> override "if" keyword in R to evaluate my own object instead > of > > a > > >> >> >>>> logical value? > > >> >> >>>> > > >> >> >>>> Thanks, > > >> >> >>>> Da > > >> >> >>>> > > >> >> >>>> ______________________________________________ > > >> >> >>>> R-devel@r-project.org mailing list > > >> >> >>>> https://stat.ethz.ch/mailman/listinfo/r-devel > > >> >> > > >> >> ______________________________________________ > > >> >> R-devel@r-project.org mailing list > > >> >> https://stat.ethz.ch/mailman/listinfo/r-devel > > >> > > > >> > > > > > > > > > > > ______________________________________________ > > R-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > > > -- > Gabriel Becker, PhD > Associate Scientist (Bioinformatics) > Genentech Research > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > -- Gabriel Becker, PhD Associate Scientist (Bioinformatics) Genentech Research [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel