这里有很多不同的案例。
如果是其他人的包中的错误
那么最好的做法是联系包维护者并说服他们修复它。这样每个人都能得到修复,而不仅仅是你。
如果是开发自己的包时出现错误
然后您需要找到一个可以轻松重建包的工作流程。就像使用devtools
打包并打字build(mypackage)
,或单击按钮(RStudio 中的“构建并重新加载”;Architect 中的“R CMD 构建”)。
如果您只是想要与现有包不同的行为
如果这不是一个错误,或者包维护者不会进行您想要的修复,那么您将必须维护自己的副本f1
。使用assignInNamespace
在现有包中覆盖它对于探索来说是可以的,但它有点 hacky,所以它并不适合永久解决方案。
你最好的选择是创建你自己的包,其中包含f1
and f2
。这比听起来要简单,因为您只需定义f2 <- existingpackage::f2
.
回复评论:
如果您独自一人,第二种和第三种情况是有意义的,但它们需要构建和安装软件包,这对于我的组织来说很棘手,因为软件包部署在数十台计算机上,并且我需要 root 访问权限来更新软件包。
因此,获取现有包源的副本,应用补丁,并将其托管在公司网络、github 或 Bitbucket 上。然后可以通过以下方式以编程方式安装更新的包
install.packages("//some/network/path/mypackage_0.0-1.tar.gz", repos = NULL)
or
library(devtools)
install_github("mypackage", "mygithubusername")
由于安装只需一行代码,因此您可以轻松地将其推送到任意多台机器上。您也不需要 root 访问权限 - 只需将包安装到不需要 root 访问权限即可写入的库文件夹中。 (阅读Startup http://www.inside-r.org/r-doc/base/Startup and .lib路径 http://www.inside-r.org/r-doc/base/.libPaths有关如何定义新库的帮助页面。)您需要对这些计算机进行网络访问,但我无法帮助您。与您的网络管理员或老板或任何可以获得您许可的人联系。