[英]Trouble installing a source package from a local file
這似乎是一個菜鳥錯誤,因為可能是。 我有一個要安裝的內置源程序包。 這是一個本地文件,我只想檢查以確保它可以工作。 一切似乎都進行得很順利,沒有錯誤...但是也沒有任何功能。
> 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"
問題是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()
加載程序包時,該函數將立即返回,因為它注意到search()
列表中存在一個saber
名稱空間,因此它假定該程序包已被加載。
解決方案是
load_all()
,然后在軟件包的源目錄中reload()
,而無需實際安裝它。 (我可能不確定,您可能需要構建。)大多數情況下,這是可行的。 或者只是使用library
來加載已安裝的軟件包:
library("saber", lib.loc = "packageCheck", logical.return = TRUE)
這有點不太方便,因為您需要一直構建和安裝,並且在R中卸載/重新加載軟件包可能會失敗。
只是不要在已安裝的軟件包上使用load_all()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.