繁体   English   中英

如何动态更改R中现有功能的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM