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.