无法从本地文件安装源包

时间:2014-07-25 23:54:36

标签: r

这似乎可能是一个新手的错误,因为它可能是。我有一个我正在尝试安装的内置源包。这是一个本地文件,我只是想检查以确保它的工作原理。一切似乎都很顺利,没有错误......但也没有任何功能。

> dir.create("packageCheck")
> install.packages("Rpackages/saber_0.1.tar.gz",   
                   lib = "packageCheck", repos = NULL)
# * installing *source* package ‘saber’ ...
# ** R
# ** inst
# ** preparing package for lazy loading
# ** help
# *** installing help indices
# ** building package indices
# ** testing if installed package can be loaded
# * DONE (saber)
> list.files("packageCheck")
# [1] "saber"
> list.files("packageCheck/saber")
# [1] "DESCRIPTION" "extdata"     "help"        "html"       
# [5] "INDEX"       "Meta"        "NAMESPACE"   "R"          
> devtools::load_all("packageCheck/saber")
# Loading saber
> library("saber", lib.loc = "packageCheck/saber", logical.return = TRUE)
# [1] TRUE
> ls(2)
# character(0)
> ls("package:saber")
# character(0)

我在这里做错了什么?

注意:

> version[[1]]
# [1] "x86_64-pc-linux-gnu"
> getOption("pkgType")
# [1] "source"

1 个答案:

答案 0 :(得分:1)

问题是devtools::load_all()不适用于加载已安装的软件包。它旨在用于包的源代码树中。例如。如果您只是在程序包的源代码树中说load_all(),那么它应该可以正常工作。

我猜想发生的是,load_all()查找要在已安装的软件包中加载的.R文件,但是已安装的软件包中没有.R个文件,R函数已放入安装包时的数据库:

/tmp/saber (master)$ ls -l packageCheck/saber/R/
total 24
-rw-r--r--  1 gaborcsardi  wheel  1056 Jul 25 23:27 saber
-rw-r--r--  1 gaborcsardi  wheel  3317 Jul 25 23:27 saber.rdb
-rw-r--r--  1 gaborcsardi  wheel   246 Jul 25 23:27 saber.rdx

所以load_all()找不到要加载的内容,但它创建了一个命名空间,名为saber。然后,当您尝试使用library()加载包时,该函数立即返回,因为它注意到saber列表中存在search()命名空间,因此它假定包是已经装好了。

解决方案要么

  1. 只需在包的源目录中使用load_all()然后使用reload(),而无需实际安装它。 (您可能需要构建,我不确定。)这在大多数情况下都有效。
  2. 或者只需使用library加载已安装的软件包:

    library("saber", lib.loc = "packageCheck", logical.return = TRUE)

    这有点不太方便,因为你需要一直构建和安装,卸载/重新加载包可能会在R中失败。

  3. 只是不要在已安装的软件包上使用load_all()