r - 如何动态更改 R 中现有函数的一行

我偶尔会遇到带有限制参数的函数。这些社区贡献的函数在其他方面绝对很棒,我希望能够定义一个新函数,即时改变困扰我的行为(而不必将整个函数重写到脚本文件中)。

我知道如何在 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/

相关文章:

r - 如何可视化概率分布函数之间的差异?

portable-executable - 为什么 PE 格式位置依赖?

python - 如何访问图中特定顶点的名称(python-igraph)

c# - 如何在使用 IDataErrorInfo 时检查模型是否有效或有错误

amazon-web-services - 如何防止使用签名网址从亚马逊云端下载视频

dns - 为 DMARC 等将 DNS IN TXT 记录拆分为多行

google-app-engine - Google App Engine 删除了默认的 GCS 存

camunda - 控制部署的 Camunda BPM 的版本

c# - 从 Roslyn 中的方法符号生成方法签名的语法

github - 如何查看用户的 github 拉取请求评论列表?