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

mds*_*ner 7 r

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

一些保存文件在更改之前约为从"base"到"stats"的约,因此正文已经存在

PACKAGE = "base"
Run Code Online (Sandbox Code Playgroud)

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

我可以用gsub()和body()以某种方式做到这一点吗?

我可以得到正文,然后替换

as.character(body(myfun))
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将其转回"呼叫"并替换定义.

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

编辑:我在这里找到了

在R中编辑函数有哪些方法?

Wil*_*son 4

使用该substitute功能。

例如:

myfun <- function(x,y) {
  result <- list(x+y,x*y)
  return(result)
}
Run Code Online (Sandbox Code Playgroud)

使用body, 视为myfun一个列表来选择您想要在函数中更改的内容:

> body(myfun)[[2]][[3]][[2]]
x + y
Run Code Online (Sandbox Code Playgroud)

当您更改此设置时,您必须使用该函数,以便根据需要substitute将函数的部分替换为call或对象。name用字符串替换不起作用,因为函数不是作为字符串存储或操作的。

body(myfun)[[2]][[3]][[2]] <- substitute(2*x)
Run Code Online (Sandbox Code Playgroud)

现在所选的函数部分已被替换:

> myfun
function (x, y) 
{
    result <- list(2 * x, x * y)
    return(result)
}
Run Code Online (Sandbox Code Playgroud)