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