Skip to content

How to catch value

3 messages · Chun-Ying Lee, Kristel Joossens, Martin Maechler

#
Dear R users:
I have a problem about catch the value from function.
I have following two functions (part):
fbolus1 <- function()
{.........
 par<-data.frame(Parameter=c("kel","Vd"),Initial=c(0))  
 check(par)
 .....}
check<-function(par)
{
 if (par[ ,2] <= 0){
 cat("\nEnter again (y/n) ?\n\n")
 ans<-readline()
   if (ans == "n" ){
     return(tidy.up()) 
  }
  else{
     cat("\n")
     par<-edit(par)
  }
 }
}  
 
I wonder if it is possible to catch the value ("par" in this example) which
"check" function generated and than go back to the "fbolus1" function,  and
keep executing the command next to "check(par)", and "fbolus1" function can 
accept the value "check" function generated. If it is possible, please give me
some comments. Thanks in advance !!
#
You can have a look at
https://stat.ethz.ch/pipermail/r-help/2005-November/082060.html


There are at least 2 ways to solve your problem
First, you can also make use of the assign function
I refer here to R> ?assign

After editting par assing the value of par to the variable name "par" by
par<-edit(par)
assign("par",par, envir = .GlobalEnv)

Secondly, similar to assign, you can also use <<-
I refer here to R> help("<<-")
par<<-edit

Good luck,
Kristel
Chun-Ying Lee wrote:
Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
#
Chun-Ying> Dear R users:
    Chun-Ying> I have a problem about catch the value from function.

The basic concepts of good S (and hence R) programming are

  1)  all functions should return their
     result, either explicitly via return() -- or "S like" by just
     have it the last expression ("last line") of your function.

  2) You *assign* the result of all your functions:  
      res <- myfunc(....)

There are very few exceptions to this (where Kristels's advice
would apply), but in your case (and in *most*), do *not* use
assign nor "<<-".


    Chun-Ying> I have following two functions (part):

    Chun-Ying> fbolus1 <- function()
    Chun-Ying> {.........
    Chun-Ying>   par<-data.frame(Parameter=c("kel","Vd"),Initial=c(0))  
    Chun-Ying>   check(par)

replace the line above with
	par <- check(par)

    Chun-Ying> .....}


    Chun-Ying> check<-function(par)
    Chun-Ying> {
    Chun-Ying> if (par[ ,2] <= 0){
    Chun-Ying> cat("\nEnter again (y/n) ?\n\n")
    Chun-Ying> ans<-readline()
    Chun-Ying> if (ans == "n" ){
    Chun-Ying> return(tidy.up()) 
    Chun-Ying> }
    Chun-Ying> else{
    Chun-Ying> cat("\n")
    Chun-Ying> par<-edit(par)

just replace the line above with   
             return(edit(par))
 
    Chun-Ying> }
    Chun-Ying> }
    Chun-Ying> }  
 
    Chun-Ying> I wonder if it is possible to catch the value ("par" in this example) which
    Chun-Ying> "check" function generated and than go back to the "fbolus1" function,  and
    Chun-Ying> keep executing the command next to "check(par)", and "fbolus1" function can 
    Chun-Ying> accept the value "check" function generated. If it is possible, please give me
    Chun-Ying> some comments. Thanks in advance !!

You're welcome.
Martin Maechler, ETH Zurich