Alberto Monteiro
2008-Apr-18 12:22 UTC
[R] Function redefinition - not urgent, but I am curious
This is just my curiousity working. Suppose I write: f1 <- function(x) x + 1 f2 <- function(x) 2 * f1(x) f2(10) # 22 f1 <- function(x) x - 1 f2(10) # 18 This is quite obvious. But is there any way to define f2 in such a way that we "freeze" the definition of f1? f1 <- function(x) x + 1 f2 <- function(x) # put something here 2 * f1(x) # probably put something else here too f2(10) # 22 f1 <- function(x) x - 1 f2(10) # 22 - f1 inside f2 does not change Alberto Monteiro
Gabor Grothendieck
2008-Apr-18 12:47 UTC
[R] Function redefinition - not urgent, but I am curious
Try
f2 <- local({f1 <- f1; function(x) 2 * f1(x) })
On Fri, Apr 18, 2008 at 8:22 AM, Alberto Monteiro
<albmont at centroin.com.br> wrote:> This is just my curiousity working.
>
> Suppose I write:
>
> f1 <- function(x) x + 1
> f2 <- function(x) 2 * f1(x)
> f2(10)
> # 22
> f1 <- function(x) x - 1
> f2(10)
> # 18
>
> This is quite obvious. But is there any way to define f2
> in such a way that we "freeze" the definition of f1?
>
> f1 <- function(x) x + 1
> f2 <- function(x)
> # put something here
> 2 * f1(x)
> # probably put something else here too
>
> f2(10)
> # 22
> f1 <- function(x) x - 1
> f2(10)
> # 22 - f1 inside f2 does not change
>
> Alberto Monteiro
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>
Dimitris Rizopoulos
2008-Apr-18 12:57 UTC
[R] Function redefinition - not urgent, but I am curious
you could define 'f1' inside 'f2' or assign 'f1' to a
new environemnt
(or use local()):
# 1st
f2 <- function(x){
f1 <- function(x) x + 1
2 * f1(x)
}
f2(10)
f1 <- function(x) x - 1
f2(10)
# 2nd
myenv <- new.env()
assign("f1", function(x) x + 1, myenv)
f2 <- function(x){
f1 <- get("f1", envir = myenv)
2 * f1(x)
}
f1 <- function(x) x - 1
f2(10)
I hope it helps.
Best,
Dimitris
----
Dimitris Rizopoulos
Biostatistical Centre
School of Public Health
Catholic University of Leuven
Address: Kapucijnenvoer 35, Leuven, Belgium
Tel: +32/(0)16/336899
Fax: +32/(0)16/337015
Web: http://med.kuleuven.be/biostat/
http://www.student.kuleuven.be/~m0390867/dimitris.htm
----- Original Message -----
From: "Alberto Monteiro" <albmont at centroin.com.br>
To: <r-help at r-project.org>
Sent: Friday, April 18, 2008 2:22 PM
Subject: [R] Function redefinition - not urgent, but I am curious
> This is just my curiousity working.
>
> Suppose I write:
>
> f1 <- function(x) x + 1
> f2 <- function(x) 2 * f1(x)
> f2(10)
> # 22
> f1 <- function(x) x - 1
> f2(10)
> # 18
>
> This is quite obvious. But is there any way to define f2
> in such a way that we "freeze" the definition of f1?
>
> f1 <- function(x) x + 1
> f2 <- function(x)
> # put something here
> 2 * f1(x)
> # probably put something else here too
>
> f2(10)
> # 22
> f1 <- function(x) x - 1
> f2(10)
> # 22 - f1 inside f2 does not change
>
> Alberto Monteiro
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>
Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
Richard.Cotton at hsl.gov.uk
2008-Apr-21 07:58 UTC
[R] Function redefinition - not urgent, but I am curious
> Suppose I write: > > f1 <- function(x) x + 1 > f2 <- function(x) 2 * f1(x) > f2(10) > # 22 > f1 <- function(x) x - 1 > f2(10) > # 18 > > This is quite obvious. But is there any way to define f2 > in such a way that we "freeze" the definition of f1?f1 <- function(x) x+1 f1frozen <- f1 f2 <- function(x) 2*f1frozen(x) f2(10) # 22 f1 <- function(x) x-1 f2(10) # 22 Regards, Richie. Mathematical Sciences Unit HSL ------------------------------------------------------------------------ ATTENTION: This message contains privileged and confidential inform...{{dropped:20}}