Dear Duncan and Henrique -
Thanks for the answers.


Tal

----------------Contact
Details:-------------------------------------------------------
Contact me: Tal.Galili@gmail.com |  972-52-7275845
Read me: www.talgalili.com (Hebrew) | www.biostatistics.co.il (Hebrew) |
www.r-statistics.com (English)
----------------------------------------------------------------------------------------------




On Tue, Mar 16, 2010 at 11:47 PM, Duncan Murdoch <murdoch@stats.uwo.ca>wrote:

> 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.Galili@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.
>>
>
>

	[[alternative HTML version deleted]]

