[英]How to change on the fly a line of an existing function in R
我偶尔会遇到带有限制性参数的函数。 否则,这些由社区贡献的功能可能会非常出色,我希望能够定义一个新的功能,而该功能可以随时改变困扰我的行为(而不必将整个功能重写为脚本文件)。
我知道如何在R中可视化函数,只需键入函数名称即可。 但是如何使用修改后的定义保存,修改和定义新功能。
最近发生在我身上,回答了这个问题 。
当然,这并不是严格的编码,而是一种在需要时快速完成所需操作的方法(由于注释者指出了这一点)。 如果有问题,请检查这篇文章的最后一部分。
最初的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
通过packageName ::: functionName
在定义中,例如使用gsub
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.