簡體   English   中英

R 嘗試從 Artifactory 安裝舊的不可用軟件包

[英]R tries to install old not available packages from Artifactory

解決方案

刪除 Artifactory 緩存中的.RDS


問題

我在 Ubuntu 上使用 R 3.6.2 和 CRAN 的企業鏡像時遇到了一個非常奇怪的問題。 假設我運行以下命令:

install.packages('rlang')

我得到的是找不到0.4.2版本。 當我手動查看存儲庫時,我發現0.4.2確實不存在,但0.4.3確實存在。 首先,我認為存儲庫存儲索引的PACKAGES文件有問題。 但我查看了它,它指向rlang的正確和可用版本。

執行install.packages()時,R 從哪里獲取它放入查詢 URL 的版本號?

更新

我試過install.packages("http://private.com/src/contrib/rlang_0.4.3.tar.gz", repos=NULL)並且它有效。 接下來我將嘗試在新的 Ubuntu 環境中復制該問題。 也許我在安裝 R 並將其升級到 3.6.2 時搞砸了


當我降級到 R 版本 3.4.4 時,問題仍然存在。 可能跟企業鏡像有關吧? 我會嘗試一個官方的。


感謝 Dirks 的回答,我通過available.packages()發現鏡像有問題,而不是 R 安裝有問題。

> AP <- available.packages()
> res <- AP[ AP[,1] == "rlang", ]
> str(res)
 Named chr [1:17] "rlang" "0.4.2" NA "R (>= 3.2.0)" NA NA ...
 - attr(*, "names")= chr [1:17] "Package" "Version" "Priority" "Depends" ...

由於鏡像中PACKAGES的可讀版本包含0.4.3我認為PACKAGES.rds有問題。 接下來,我將嘗試讀入該對象以確認我的假設。


Dirk 建議我檢查索引的時間戳,我想我發現了問題。 0.4.3不久前發布。 雖然可讀索引僅在其他幾個之前更新,但.rds文件(可能由 R 使用)自2020-01-16以來一直沒有更新。 因此,R 嘗試下載不再屬於存儲庫的版本。

現在我想知道誰負責更新RDS文件? 存儲庫本身? 我會在下次報告......也許在隨機批處理作業更新存儲庫后問題會自行解決。

rlang 包: Rlang 包

時間戳: 不同的時間戳

包內容: 包裝內容


我手動下載了PACKAGES.rds並在其上使用了readRDS() 它指向舊版本。 我還檢查了鏡像的回購。 它的PACKAGES.rds指向正確的版本。 此外,我確保問題獨立於我使用的發行版和圖像而持續存在。

你可以問R這個問題! available.packages()函數告訴您它知道的“一切”,其中一個條目是“Repository”。

所以:

R> AP <- available.packages()       ## all known packages given options("repos")
R> res <- AP[ AP[,1] == "rlang", ]  ## find rlang
R>
R> str(res)
 Named chr [1:17] "rlang" "0.4.3" NA "R (>= 3.2.0)" NA NA ...
 - attr(*, "names")= chr [1:17] "Package" "Version" "Priority" "Depends" ...
R> 
R> names(res)
 [1] "Package"               "Version"              
 [3] "Priority"              "Depends"              
 [5] "Imports"               "LinkingTo"            
 [7] "Suggests"              "Enhances"             
 [9] "License"               "License_is_FOSS"      
[11] "License_restricts_use" "OS_type"              
[13] "Archs"                 "MD5sum"               
[15] "NeedsCompilation"      "File"                 
[17] "Repository"           
R> 
R> res["Repository"]
                               Repository 
"https://cloud.r-project.org/src/contrib" 
R> 

這並不奇怪,因為這是我使用的默認配置(並在 Debian / Ubuntu 包中編碼)的默認存儲庫。

如果你這樣做

?install.packages()

它將為您提供有關進行檢索的函數的一些信息,您可以輸入一個“repo”參數。 大多數情況下,如果我有軟件包安裝問題並且不太擔心運行以下程序的確切版本:

install.packages("rlang", dependencies = TRUE)

通常對我很好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM