On 03/16/2015 05:05 PM, Saptarshi Guha wrote:
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

here's one way to implement your original example -- signal and handle, via tryCatch(), a custom condition created (modelled after simpleCondition()) as an S3 class with linear inheritance.

X <- function() {
    print("I'm saying...")
    signalCondition(structure(list(), class=c("my", "condition")))
    print("X")
}

Y <- function(){
    tryCatch(XParent(), my=function(...) NULL)
    print("hello")
}

XParent <- function(){
    X()
    print("H")
}

leading to

  > Y()
  [1] "I'm saying..."
  [1] "hello"

callCC() is tricky for me to grasp, but I'll write Y to accept an argument X, which will be a function. It'll call XParent with that function, and XParent will use the function.

Y <- function(X){
    XParent(X)
    print("hello")
}

XParent <- function(X){
    X("fun")
    print("H")
}

then we've got

  > Y(X)
  Error in XParent(X) (from tmp.R!4361C1Y#2) : object 'X' not found
  > Y(function(x) print("X"))
  [1] "X"
  [1] "H"
  [1] "hello"

but more interestingly the long jump to the top (where callCC was invoked)

  > callCC(function(X) { Y(X) })
  [1] "fun"

or in a function

  y <- function() {
      value <- callCC(function(X) {
          Y(X)
      })
      print(value)
      print("done")
  }

Hope that helps and is not too misleading. Excellent question.

Martin



On Mon, Mar 16, 2015 at 4:02 PM, David Winsemius <dwinsem...@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


______________________________________________
R-help@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.



--
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109

Location: Arnold Building M1 B861
Phone: (206) 667-2793

______________________________________________
R-help@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.

Reply via email to