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.