On 16/03/2010 5:31 PM, Tal Galili wrote:
Hello,
Let's say we have the following function:
foo <- function(x)
{
line1 <- x
line2 <- 0
line3 <- line1 + line2
return(line3)
}
And that we want to change the second line to be:
line2 <- 2
How would you do that?
The two ways I know of are either to use
fix(foo)
And change the function.
Or to just write the function again.
That's the best way.
Is there another way?
You can use findLineNum to find where that line of source appears in
your workspace. For example, if I source your input from the above, the
line that interests you is line 9 of my foo.R input file. Then
> source("c:/temp/foo.R")
> findLineNum("foo.R#9")
c:\temp\foo.R#9:
foo step 3 in <environment: R_GlobalEnv>
> body(foo)[[3]]
line2 <- 0
Now I can replace step 3 using
body(foo)[[3]] <- quote(line2 <- 2)
If the line you want is nested deep within a block structure, you might
need to use a vector index to get to it, e.g. after wrapping that line
in an if() { }, I see
> findLineNum("foo.R#10")
c:\temp\foo.R#10:
foo step 3,3,2 in <environment: R_GlobalEnv>
> body(foo)[[c(3,3,2)]] <- quote(line2 <- 2)
> foo
function (x)
{
line1 <- x
if (x > 0) {
line2 <- 2
}
line3 <- line1 + line2
return(line3)
}
The findLineNum() function depends on having source references in the
function, so it won't work on functions in packages unless you build
them with the option to keep package source refs. (And then you need
special contortions to tell it to look in the namespace for the
function, and to edit a function in the namespace. Better not to do that.)
Duncan Murdoch
*What I would like* is for some way to represent the function as a vector of
strings (well, characters), then change one of it's values, and then turn it
into a function again.
The reason I am asking is that I just published a post online where I used a
function to which I did a minor tweak (so to improve it's output for my
particular case).
This tweaking was just adding one line of code, to a function who's length
is 187 lines of code. So instead of repasting all the function on my blog, I
decided to just explain how to edit it. But I would rather have a simple
code that edited the function for the reader.
Thanks,
Tal
----------------Contact
Details:-------------------------------------------------------
Contact me: tal.gal...@gmail.com | 972-52-7275845
Read me: www.talgalili.com (Hebrew) | www.biostatistics.co.il (Hebrew) |
www.r-statistics.com (English)
----------------------------------------------------------------------------------------------
[[alternative HTML version deleted]]
______________________________________________
R-help@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.
______________________________________________
R-help@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.