r - 修改现有函数对象的正文

标签 r

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

一些保存文件早于将 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?

最佳答案

使用 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)
}

关于r - 修改现有函数对象的正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2971419/

相关文章:

r - 如何将一列添加到数据集中,从 R 中的一列中添加值并从另一列中减去值?

r - 如何提取两个不同时间值之间的营业时间

regex - 答:如何更换。在一个字符串中?

R:ggplot在x轴上显示所有日期

r - 获取 R 调色板中的颜色名称

r - 为什么 metaMDS() 会产生水平分布的数据?

正则表达式进行过滤,然后确定最新日期

r - 汇总不同聚合级别的数据 - R 和 tidyverse

python - 从 OLE 结构化数据中提取数据

r - 当我点击饼图中的某个部分时,有没有办法打开数据集?