我想使用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,就可以了。

您也可以考虑与软件包维护者联系,以告知他们该错误。

08-04 20:08