system.file () работает хорошо, но base :: system.file () нет - PullRequest
0 голосов
/ 20 сентября 2018

Теперь я разрабатываю некоторый пакет 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"

1 Ответ

0 голосов
/ 20 сентября 2018

можно использовать ??чтобы увидеть, какие пакеты реализуют эту функцию, 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

Один возвращает путь относительно пакета

Когда system.file вызывается из консоли R (глобальное окружение), эта функция определяет, был ли целевой пакет загружен с помощью load_all, и еслипоэтому он использует индивидуальный метод поиска файла.Это необходимо, поскольку структура каталогов исходного пакета отличается от структуры каталогов установленного пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...