有什么方法可以编辑R中的函数?

假设我们有以下功能:

foo <- function(x)
{
    line1 <- x
    line2 <- 0
    line3 <- line1 + line2
    return(line3)
}

而且我们希望将第二行更改为:

    line2 <- 2

你会怎么做?

一种方法是使用

fix(foo)

并改变功能。

另一种方法是再次写入函数。

有另一种方法吗? (记住,任务是改变第二行)

我想以某种方式将函数表示为字符串的向量(以及字符),然后更改其中一个值,然后再次将其转换为函数。


或者看看调试函数trace() 。 这可能不是你正在寻找的东西,但它可以让你玩弄变化,它具有很好的特性,你可以随时使用untrace()返回到原始函数。 trace()base软件包的一部分,并附带了一个很好且彻底的帮助页面。

首先调用as.list (body(foo))来查看代码的所有行。

as.list(body(foo))
[[1]]
`{`

[[2]]
line1 <- x

[[3]]
line2 <- 0

[[4]]
line3 <- line1 + line2

[[5]]
return(line3)

然后,通过在trace()定义参数,您只需定义要添加到函数中的内容以及将其放置在何处。

trace (foo, quote(line2 <- 2), at=4)
foo (2)
[1] 4

我在一开始就说过trace()可能不是你正在寻找的,因为你并没有真正改变你的第三行代码,而是简单地将这个值重新分配给下面插入的代码行中的对象line2 。 如果你打印出你现在跟踪的函数的代码,它会变得更清晰

body (foo)
{
    line1 <- x
    line2 <- 0
    {
        .doTrace(line2 <- 2, "step 4")
        line3 <- line1 + line2
    }
    return(line3)
}

> body(foo)[[3]] <- substitute(line2 <- 2)
> foo
function (x) 
{
    line1 <- x
    line2 <- 2
    line3 <- line1 + line2
    return(line3)
}

(“{”是body(foo)[[1]],每一行都是列表的一个连续元素。)


fix是我知道这样做的最佳方式,但您也可以使用edit并重新指定它:

foo <- edit(foo)

这是内部fix 。 如果您想要将更改重新分配给其他名称,则可能需要执行此操作。

链接地址: http://www.djcxy.com/p/6521.html

上一篇: What ways are there to edit a function in R?

下一篇: Erlang supervisor does not restart child