Hello, I would like a function X to return to the place that called the function XParent that called this function X. Y calls XParent Y = function(){ XParent() print("hello") } XParent calls X XParent = function(){ X() print("H") } X returns to the point just after the call to XParent. Hence print("H") is not called, but instead "hello" is printed. An example of what i'm going for is this continueIfTrue <- function(filterExp, grpname, subname,n=1){ y <- substitute(filterExp) res <- isn(eval(y, envir=parent.frame()),FALSE) ## if res is FALSE, I would like to return from telemStats } telemStats <- function(a,b){ b <- c(10,12) continueIfTrue( { length(b) >=10 }, "progStats","00") print("Since the above condition failed, I would not like this message to be printed") } I looked into callCC and signals but dont think i understood correctly. Any hints would be appreciated Kind Regards Saptarshi
On Mar 16, 2015, at 3:08 PM, Saptarshi Guha wrote:> Hello, > > I would like a function X to return to the place that called the > function XParent that called this function X. > > Y calls XParent > Y = function(){ > XParent() > print("hello") > } > > XParent calls X > > XParent = function(){ > X() > print("H") > } > > X returns to the point just after the call to XParent. Hence > print("H") is not called, but instead "hello" is printed.?sys.call # my second reading of your question makes me think this wasn't what was requested. ?return # this would do what was asked for> XParent = function(){+ return(sys.call()) + print("H") + }> Y()[1] "hello" # Success # now to show that a value could be returned if desired> Y = function(){+ print(XParent()) + print("hello") + }> XParent = function(){+ return(sys.call()) + print("H") + }> Y()XParent() [1] "hello"> > X returns to the point just after the call to XParent. Hence > print("H") is not called, but instead "hello" is printed. > > An example of what i'm going for is this > > continueIfTrue <- function(filterExp, grpname, subname,n=1){ > y <- substitute(filterExp) > res <- isn(eval(y, envir=parent.frame()),FALSE) > ## if res is FALSE, I would like to return from telemStats > } > > telemStats <- function(a,b){ > b <- c(10,12) > continueIfTrue( { length(b) >=10 }, "progStats","00") > print("Since the above condition failed, I would not like this > message to be printed") > }I'm afraid there were too many undefined objects to make much sense of that example.> > I looked into callCC and signals but dont think i understood correctly. > Any hints would be appreciated > > Kind Regards > Saptarshi >-- David Winsemius Alameda, CA, USA
Example was complicated, but here is a simpler form continueIfTrue <- function(mm=return()){ eval(mm) } telemStats <- function(){ y <- substitute(return()) continueIfTrue(y) print("I would not like this message to be printed") } telemStats() Ideally, calling telemStats() should return to the prompt and the print in telemStats should not appear On Mon, Mar 16, 2015 at 4:02 PM, David Winsemius <dwinsemius at comcast.net> wrote:> > On Mar 16, 2015, at 3:08 PM, Saptarshi Guha wrote: > >> Hello, >> >> I would like a function X to return to the place that called the >> function XParent that called this function X. >> >> Y calls XParent >> Y = function(){ >> XParent() >> print("hello") >> } >> >> XParent calls X >> >> XParent = function(){ >> X() >> print("H") >> } >> >> X returns to the point just after the call to XParent. Hence >> print("H") is not called, but instead "hello" is printed. > > ?sys.call # my second reading of your question makes me think this wasn't what was requested. > > ?return # this would do what was asked for > >> XParent = function(){ > + return(sys.call()) > + print("H") > + } >> Y() > [1] "hello" > > # Success > # now to show that a value could be returned if desired > >> Y = function(){ > + print(XParent()) > + print("hello") > + } >> XParent = function(){ > + return(sys.call()) > + print("H") > + } >> Y() > XParent() > [1] "hello" > > >> >> X returns to the point just after the call to XParent. Hence >> print("H") is not called, but instead "hello" is printed. >> >> An example of what i'm going for is this >> >> continueIfTrue <- function(filterExp, grpname, subname,n=1){ >> y <- substitute(filterExp) >> res <- isn(eval(y, envir=parent.frame()),FALSE) >> ## if res is FALSE, I would like to return from telemStats >> } >> >> telemStats <- function(a,b){ >> b <- c(10,12) >> continueIfTrue( { length(b) >=10 }, "progStats","00") >> print("Since the above condition failed, I would not like this >> message to be printed") >> } > > I'm afraid there were too many undefined objects to make much sense of that example. > >> >> I looked into callCC and signals but dont think i understood correctly. >> Any hints would be appreciated >> >> Kind Regards >> Saptarshi >> > -- > > David Winsemius > Alameda, CA, USA >
> On 16-03-2015, at 23:08, Saptarshi Guha <saptarshi.guha at gmail.com> wrote: > > Hello, > > I would like a function X to return to the place that called the > function XParent that called this function X. > > Y calls XParent > Y = function(){ > XParent() > print("hello") > } > > XParent calls X > > XParent = function(){ > X() > print("H") > } > > X returns to the point just after the call to XParent. Hence > print("H") is not called, but instead "hello" is printed. >I do not understand what you are saying or implying here. Take this R code: ####<code> Y <- function(){ XParent() print("hello") } XParent <- function(){ X() print("H") } X <- function() { print("In function X") } Y() ####</code> and this is the output: [1] "In function X" [1] "H" [1] "hello" Implying that everything you seem to want printed is acually printed. Berend
Perhaps read ?try --------------------------------------------------------------------------- Jeff Newmiller The ..... ..... Go Live... DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/Batteries O.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...1k --------------------------------------------------------------------------- Sent from my phone. Please excuse my brevity. On March 16, 2015 3:08:35 PM PDT, Saptarshi Guha <saptarshi.guha at gmail.com> wrote:>Hello, > >I would like a function X to return to the place that called the >function XParent that called this function X. > >Y calls XParent >Y = function(){ > XParent() > print("hello") >} > >XParent calls X > >XParent = function(){ > X() > print("H") >} > >X returns to the point just after the call to XParent. Hence >print("H") is not called, but instead "hello" is printed. > >An example of what i'm going for is this > >continueIfTrue <- function(filterExp, grpname, subname,n=1){ > y <- substitute(filterExp) > res <- isn(eval(y, envir=parent.frame()),FALSE) > ## if res is FALSE, I would like to return from telemStats >} > >telemStats <- function(a,b){ > b <- c(10,12) > continueIfTrue( { length(b) >=10 }, "progStats","00") > print("Since the above condition failed, I would not like this >message to be printed") >} > >I looked into callCC and signals but dont think i understood correctly. >Any hints would be appreciated > >Kind Regards >Saptarshi > >______________________________________________ >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.