R 加载包中的函数不';不显示在搜索路径中
我有一个已发布的包R 加载包中的函数不';不显示在搜索路径中,r,packages,R,Packages,我有一个已发布的包cgwtools,其中包含了一个超负荷的操作员。以下是源文件splatnd.r中的代码: `!` <- function (e1, e2) { call <- match.call() original <- function() { call[[1]] <- quote(base::`!`) return(eval(call, parent.frame(2))) } swit
cgwtools
,其中包含了一个超负荷的代码>操作员。以下是源文件splatnd.r
中的代码:
`!` <- function (e1, e2)
{
call <- match.call()
original <- function() {
call[[1]] <- quote(base::`!`)
return(eval(call, parent.frame(2)))
}
switch(paste(as.character(call[[2]]), sep = "", collapse = ""),
newdev = dev.new(width = 4.5, height = 4.5, restoreConsole = T),
qapla = cat("batlh tIn chav\n"), return(original()))
}
通过比较,对sos
包执行相同操作将返回我所期望的结果:
> getAnywhere(`?`)
2 differing objects matching ‘?’ were found
in the following places
package:sos
package:utils
namespace:utils
namespace:sos
如果访问输出,将显示正确的源代码:
> getAnywhere(`!`)[2]
function (e1, e2)
{
call <- match.call()
original <- function() {
call[[1]] <- quote(base::`!`)
return(eval(call, parent.frame(2)))
}
switch(paste(as.character(call[[2]]), sep = "", collapse = ""),
newdev = dev.new(width = 4.5, height = 4.5, restoreConsole = T),
qapla = cat("batlh tIn chav\n"), return(original()))
}
<environment: namespace:cgwtools>
以及
再次表明“!”不是从cgwtools
导出的。
还请注意--请参见上文,了解从
getAnywhere(`!`)
我可以提取代码:
> getAnywhere(`!`)[2](qapla)
batlh tIn chav
感谢@alexis_laz的建议,我回去查看了package.skeleton
生成的默认名称空间
文件。该文件包含行
exportPattern(“^[:alpha:]+”
显然,我需要在这个文件中添加一个显式的导出(“!”)
行。(加上根据最近的CRAN要求对base
包的显式导入
的新要求,但这是一个单独的问题)
编辑
对于没有经验的人(如我),请注意,在更改名称空间
文件后,必须重新构建包。编辑所述文件不足。是否导出了“!”
?(第二部分你可以试试cgwtools::“!”(qapla)
)@alexis_laz请看更新。谢谢。如果要使用,“!”
难道不应该导出吗?@alexis_laz。当然,问题是:为什么不是?我在构建包时没有做任何魔术。也许,它只是包的默认导出
ing。骨架
(或另一个导出
ing模式)忽略命名空间中的“!”
。您可能可以显式地添加export(!”
> get('!')(qapla)
Error: object 'qapla' not found
> get('!',2)(qapla)
Error: object 'qapla' not found
getAnywhere(`!`)
> getAnywhere(`!`)[2](qapla)
batlh tIn chav