我想使用R脚本将特殊修改的函数添加到其他人编写的包中,即仅用于会话,而不是永久使用。比方说,具体示例是将bls_map_county2()
添加到blscrapeR包中。 bls_map_county2
只是bls_map_county()
函数的一个副本,带有一个添加的...
参数,用于更改一些地图绘制参数。我尚未插入其他参数。按原样运行该函数,出现错误:
BLS_map_county中的错误(map_data = df,fill_rate =“ unemployed_rate” ,:
找不到函数“ geom_map”
我认为这是因为我的函数没有指向blscrapeR
命名空间。我如何将我的功能分配给(已安装,已加载的)blscrapeR
名称空间,还有什么我需要做的事情才能让它从所需的软件包中访问任何机器?
最佳答案
该答案分为两部分-首先是对问题的一般性答案,其次是针对您所引用的特定功能的特定答案,其中问题有所不同。
1)编辑包函数时访问内部函数的通用解决方案
由于已加载包名称空间,因此您应该已经可以访问它,因此只有未导出的功能才会给您带来问题。
我通常只是将包名称和:::
运算符放在非导出函数的前面。即,找到调用some_internal_function()
的每个实例,然后将其替换为PackageName:::some_internal_function()
。如果要编辑的函数中调用了多个不同的内部函数,则可能需要对每个有问题的函数调用多次执行此操作。:::
的帮助页面确实包含这些警告
当心-使用':::'后果自负!
和
在代码中使用:::通常是设计错误,因为
相应的对象可能已经保存好了
原因。如果您觉得与包装维护者联系,请考虑
除了检查以外,需要访问该对象。
但是对于您正在做的事情,就暂时从同一个程序包中入侵另一个功能供您自己使用而言,这些警告应该可以忽略不计(当然,后果自负-如手册中所述)
2)对于blscrapeR ::bls_map_county()
在这种情况下,违规行是
ggplot2::ggplot() + geom_map(...
包编写者在其中为
ggplot()
指定了ggplot2命名空间,但对于geom_map()
却忘记了这样做,它也是ggplot2的一部分(而不是blscrapeR的内部函数)。在这种情况下,只需加载ggplot2,就可以了。
您也可以考虑与软件包维护者联系,以告知他们该错误。