修改现有函数对象的正文文本
我有一些包含由approxfun()定义的保存函数的.Rdata文件。
一些保存文件会在更改为约从包“基”到“统计”之前进行更新,因此主体具有
PACKAGE = "base"
并且错误的包导致该功能失败。 我可以修复(myfun),只需将“base”替换为“stats”,但我想要一个整洁的自动方式。
我可以用gsub()和body()以某种方式做到这一点吗?
我可以得到正文并用其替代
as.character(body(myfun))
但我不知道如何将它变回“调用”并替换定义。
(我知道一个更好的解决方案是保存了approxfun最初使用的数据并简单地重新创建函数,但我想知道是否有明智的方法来修改现有的数据。)
编辑:我在这里找到它
有什么方法可以编辑R中的函数?
使用substitute
功能。
例如:
myfun <- function(x,y) {
result <- list(x+y,x*y)
return(result)
}
使用body
,将myfun
作为一个列表来选择你想在函数中改变的内容:
> body(myfun)[[2]][[3]][[2]]
x + y
当你改变这个时,你必须使用substitute
函数,以便用适当的call
或name
对象替换该函数的一部分。 用字符串替换不起作用,因为函数不是以字符串的形式存储或操作的。
body(myfun)[[2]][[3]][[2]] <- substitute(2*x)
现在选中的功能块已被替换:
> myfun
function (x, y)
{
result <- list(2 * x, x * y)
return(result)
}
链接地址: http://www.djcxy.com/p/1001.html
上一篇: modify the body text of existing function objects
下一篇: Erlang Supervisor Strategy For Restarting Connections to Downed Hosts