我偶尔会遇到带有限制参数的函数。这些社区贡献的函数在其他方面绝对很棒,我希望能够定义一个新函数,即时改变困扰我的行为(而不必将整个函数重写到脚本文件中)。
我知道如何在 R 中可视化函数,只需键入函数名称即可。但是如何使用修改后的定义保存、修改和定义新函数。
最佳答案
最近发生在我身上,回答this question .
当然,这并不意味着是坚如磐石的编码,而只是一种在需要时快速完成所需操作的方法(感谢评论者指出)。如果出现问题,请检查本文的最后一部分。
最初的 vis.gam
函数定义了一个从 0.1 到 0.9 的灰色调色板,我希望它从 0.9 到 0.1。
对该函数的快速检查表明,提供调色板的方法并不简单,但更改有问题的行很容易:
[156] " pal <- gray(seq(0.1, 0.9, length = nCol))"
改这样一行其实真的很简单简洁:
# first save the definition as a list of string
newDef <- deparse(vis.gam)
# then identify the line to be changed using regular expressions
# (see ?regexp)
iLine <- grep("gray\\(seq\\(",initDef)
# replace the line by what you want
newDef[iLine] <- " pal <- gray(seq(0.9, 0.1, length = nCol))"
# and define a new function by parsing and evaluating the
# new definition
vis.gam2 <- eval(parse(text=newDef))
完成
新函数在运行时可能会提示缺少函数。这是由于包命名空间问题。这意味着该函数正在调用包内部的函数,这些函数在通用命名空间中不可用。然后您需要指定包替换
functionName
由 包名:::函数名
在定义中,例如使用gsub
。
https://stackoverflow.com/questions/29260840/