On Sun, Mar 5, 2017 at 2:50 PM, Michael Lawrence <lawrence.michael at gene.com> wrote:> > > On Sat, Mar 4, 2017 at 12:36 PM, Da Zheng <zhengda1936 at 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.michael at 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 <zhengda1936 at 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.gabor at 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 <zhengda1936 at 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.gabor at 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 <zhengda1936 at 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 at r-project.org mailing list >> >> >>>> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> >> >> ______________________________________________ >> >> R-devel at r-project.org mailing list >> >> https://stat.ethz.ch/mailman/listinfo/r-devel >> > >> > > >
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 <zhengda1936 at gmail.com> wrote:> On Sun, Mar 5, 2017 at 2:50 PM, Michael Lawrence > <lawrence.michael at gene.com> wrote: > > > > > > On Sat, Mar 4, 2017 at 12:36 PM, Da Zheng <zhengda1936 at 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.michael at 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 <zhengda1936 at 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.gabor at 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 <zhengda1936 at 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.gabor at 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 <zhengda1936 at 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 at r-project.org mailing list > >> >> >>>> https://stat.ethz.ch/mailman/listinfo/r-devel > >> >> > >> >> ______________________________________________ > >> >> R-devel at r-project.org mailing list > >> >> https://stat.ethz.ch/mailman/listinfo/r-devel > >> > > >> > > > > > > > ______________________________________________ > R-devel at 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]]
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-bounces at r-project.org] on behalf of Gabriel Becker [gmbecker at ucdavis.edu] Sent: 06 March 2017 11:43 To: Da Zheng Cc: r-devel at 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 <zhengda1936 at gmail.com> wrote:> On Sun, Mar 5, 2017 at 2:50 PM, Michael Lawrence > <lawrence.michael at gene.com> wrote: > > > > > > On Sat, Mar 4, 2017 at 12:36 PM, Da Zheng <zhengda1936 at 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.michael at 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 <zhengda1936 at 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.gabor at 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 <zhengda1936 at 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.gabor at 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 <zhengda1936 at 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 at r-project.org mailing list > >> >> >>>> https://stat.ethz.ch/mailman/listinfo/r-devel > >> >> > >> >> ______________________________________________ > >> >> R-devel at r-project.org mailing list > >> >> https://stat.ethz.ch/mailman/listinfo/r-devel > >> > > >> > > > > > > > ______________________________________________ > R-devel at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Da Zheng would like to override 'if' and 'while' to accept more than scalar logicals and Martin Maechler would like to change 'if' to accept only scalar logicals. No one has mentioned '||' and '&&', which also want scalar logicals. Perhaps a solution is to have all of these call a new generic function, as.scalar.logical() on their relevant arguments. (For efficiency, the default would be internally dispatched). Bill Dunlap TIBCO Software wdunlap tibco.com On Sun, Mar 5, 2017 at 4:43 PM, Gabriel Becker <gmbecker at ucdavis.edu> wrote:> 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 <zhengda1936 at gmail.com> wrote: > >> On Sun, Mar 5, 2017 at 2:50 PM, Michael Lawrence >> <lawrence.michael at gene.com> wrote: >> > >> > >> > On Sat, Mar 4, 2017 at 12:36 PM, Da Zheng <zhengda1936 at 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.michael at 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 <zhengda1936 at 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.gabor at 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 <zhengda1936 at 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.gabor at 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 <zhengda1936 at 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 at r-project.org mailing list >> >> >> >>>> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> >> >> >> >> ______________________________________________ >> >> >> R-devel at r-project.org mailing list >> >> >> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> > >> >> > >> > >> > >> >> ______________________________________________ >> R-devel at 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 at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel