现在,我开发了一些R包,以避免不同包之间出现重复名称,
我想使用base::system.file()

但是一旦我在名为base::system.file()的程序包中运行"aa"
第一次很好
但是第二次运行时,它返回"",即为空。

通过消除base,即system.file()进行得很好。请让我知道为什么返回值是""(空)。

 base::system.file("extdata", "aaaaa.stan", package="aa")
[1] ""
> system.file("extdata", "aaaaa.stan", package="aa")
[1] "C:/Users/xxxxx/Desktop/aa/inst/extdata/aaaaa.stan"

最佳答案

您可以使用 ??查看哪些包实现了该功能,
devtools会覆盖system.file,因此system.file的功能可能不同于base:system.file。

??system.file


另外,如果您只键入该函数,则应显示该函数的程序包

> base::system.file
function (..., package = "base", lib.loc = NULL, mustWork = FALSE)
{
    if (nargs() == 0L)
        return(file.path(.Library, "base"))
    if (length(package) != 1L)
        stop("'package' must be of length 1")
    packagePath <- find.package(package, lib.loc, quiet = TRUE)
    ans <- if (length(packagePath)) {
        FILES <- file.path(packagePath, ...)
        present <- file.exists(FILES)
        if (any(present))
            FILES[present]
        else ""
    }
    else ""
    if (mustWork && identical(ans, ""))
        stop("no file found")
    ans
}
<bytecode: 0x2342e00>
<environment: namespace:base>


似乎system.file运行的devtools:system.file与base :: system.file不同

https://www.rdocumentation.org/packages/devtools/versions/1.13.6/topics/system.file

一种是返回相对于包的路径


当从R控制台调用system.file时(全局
环境),此功能将检测目标软件包是否已加载
使用load_all,如果是,它将使用一种自定义方法搜索
文件。这是必需的,因为
源程序包与目录包的目录结构不同
已安装的软件包。

关于r - system.file()进行得很好,但是base::system.file()不能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52415821/

10-08 22:27
查看更多