r - 什么时候不应该使用 assignInNamespace?
问题描述
我有一个用例,我暂时想覆盖package:::function()
测试,或者因为我只会以新的方式使用该函数一次。
我发现assignInNamespace
哪个可以完成这项工作,例如
joke <- function(...) {return("hurz")}
assignInNamespace(x = "add1.glm", value = joke, pos = "package:stats")
stats:::add1.glm()
# [1] "hurz"
??assignInNamespace
但是来自包utils
状态的文档
警告:assignInNamespace 不应在最终代码中使用,如果从包中调用,将来会抛出错误。已经不允许某些用途。
不幸的是,我找不到这个警告的真正含义,如果这个功能assignInNamespace
在一段时间内完全被弃用,那将是很长的时间。有没有遗漏任何文件?
编辑:我想,这将主要影响我自己的包裹。
解决方案
如果您想出于测试目的执行此操作,则最好使用trace(stats:::add1.glm, edit = TRUE)
. 这将允许您用您想要的任何代码临时替换函数的主体,并untrace(stats::add1.glm)
恢复原始代码。trace()
将来被删除或大幅限制的可能性很小。
出于 Konrad 所述的原因,您不应该尝试在生产代码中执行此操作。
推荐阅读
- c# - 单击嵌套控件时如何找到父控件?
- bash - Makefile没有正确地将值分配给变量
- mysql - 如何在 SQL 中将行转换为列?
- python - GitLab CI 共享用于 Python 的 Windows 运行器
- c - 为什么Linux内核的KCOV代码中有barrier()?
- bash - 使用 Azure CLI 时出现“'C:\Program' 未被识别为内部或外部命令”错误
- sql-server - 用于在不同服务器上的两个数据库之间同步数据的 SQL 脚本
- java - ANT 到 Maven 迁移。Maven 替代 build.xml
- php - 如何在 CodeIgniter 中构建我的控制器/类
- perl - Perl查询最短算法