我偶尔会遇到带有限制性参数的函数。这些社区贡献的函数绝对很棒,否则我希望能够定义一个新函数,动态地改变困扰我的行为(而不必将整个函数重写到脚本文件中)。
我知道如何在 R 中可视化函数,只需键入函数名称即可。但是如何用修改后的定义保存、修改和定义新函数。
最近发生在我身上,回答这个问题 https://stackoverflow.com/q/29257926/1174052.
注意事项
当然,这并不意味着是坚如磐石的编码,而只是一种在需要时快速完成您想要的事情的方法(感谢评论者指出)。如果出现问题,请检查本文的最后部分。
窍门
最初的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))
Done
如果出现问题
新函数在运行时可能会抱怨缺少的函数。这是由于包命名空间问题造成的。这意味着该函数正在调用包内部的函数,而这些函数在通用命名空间中不可用。然后您需要指定替换的包
functionName
经过
包名:::函数名
在定义中,例如使用gsub
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)