[R] Returning to parent function

Saptarshi Guha saptarshi.guha at gmail.com
Tue Mar 17 01:05:57 CET 2015


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
>



More information about the R-help mailing list