修改现有函数对象的正文文本

时间:2010-06-04 03:56:14

标签: r

我有一些.ddata文件包含由approxfun()定义的已保存函数。

某些保存文件在更改之前约会从包“base”到“stats”,因此正文已

PACKAGE = "base"

错误的包导致函数失败。我可以修复(myfun)并简单地将“base”替换为“stats”,但我想要一个更整洁的自动方式。

我可以用gsub()和body()以某种方式执行此操作吗?

我可以获取正文并用

代替
as.character(body(myfun))

但我不知道如何将其转回“呼叫”并替换定义。

(我知道更好的解决方案是保存最初由approxfun使用的数据并简单地重新创建该功能,但我想知道是否有一种合理的方法来修改现有的功能。)

编辑:我在这里找到了

What ways are there to edit a function in R?

1 个答案:

答案 0 :(得分:4)

使用substitute功能。

例如:

myfun <- function(x,y) {
  result <- list(x+y,x*y)
  return(result)
}

使用body,将myfun视为列表,选择您希望在功能中更改的内容:

> body(myfun)[[2]][[3]][[2]]
x + y

更改此设置时,必须使用substitute功能,以便根据需要使用callname对象替换函数的一部分。替换为字符串不起作用,因为函数不作为字符串存储或操作。

body(myfun)[[2]][[3]][[2]] <- substitute(2*x)

现在所选功能部分已被替换:

> myfun
function (x, y) 
{
    result <- list(2 * x, x * y)
    return(result)
}