4 回答

TA貢獻1871條經驗 獲得超8個贊
在存在NAMESPACE的情況下,另一個問題是你試圖從包foo運行一個未導出的函數。
例如(人為,我知道,但是):
> mod <- prcomp(USArrests, scale = TRUE)> plot.prcomp(mod)Error: could not find function "plot.prcomp"
首先,你不應該直接調用S3方法,但假設plot.prcomp
在包foo中實際上是一些有用的內部函數。如果您知道自己在做什么,要調用此類函數需要使用:::
。您還需要知道找到該函數的命名空間。使用getAnywhere()
我們發現該函數在包統計中:
> getAnywhere(plot.prcomp)A single object matching ‘plot.prcomp’ was found It was found in the following places registered S3 method for plot from namespace stats namespace:stats with valuefunction (x, main = deparse(substitute(x)), ...) screeplot.default(x, main = main, ...)<environment: namespace:stats>
所以我們現在可以直接調用它:
> stats:::plot.prcomp(mod)
我plot.prcomp
只是用一個例子來說明目的。在正常使用中,您不應該像這樣調用S3方法。但正如我所說,如果您要調用的函數存在(例如它可能是隱藏的實用程序函數),但是在a中namespace
,R將報告它無法找到該函數,除非您告訴它要查找哪個命名空間。
將此與以下內容進行比較: stats::plot.prcomp
上述操作失敗,因為在stats
使用時plot.prcomp
,它不會導出,stats
因為錯誤正確地告訴我們:
錯誤:'plot.prcomp'不是'namespace:stats'中的導出對象
這記錄如下:
pkg :: name返回命名空間pkg中導出的變量名的值,而pkg ::: name返回內部變量名的值。

TA貢獻1776條經驗 獲得超12個贊
當計算機在我的控制之下時,我通??梢越鉀Q這個問題,但在使用網格時更麻煩。當網格不是同源的時,并不是所有的庫都可以安裝,而我的經驗通常是沒有安裝軟件包,因為沒有安裝依賴項。為了解決這個問題,我檢查以下內容:
是否安裝了Fortran?(尋找'gfortran'。)這會影響R中的幾個主要包。
是Java安裝?Java類路徑是否正確?
檢查包是否由管理員安裝并可供相關用戶使用。有時,用戶會在錯誤的位置安裝軟件包,或者在沒有適當訪問權限的情況下運行。
.libPaths()
是一個很好的檢查。檢查
ldd
R的結果,以確保共享庫最好定期運行一個腳本,只需加載所需的每個包,并做一些小測試。這會在工作流程中盡早捕獲包問題。這類似于構建測試或單元測試,除了它更像是一個煙霧測試,以確保基本的東西工作。
如果包可以存儲在網絡可訪問的位置,是嗎?如果他們不能,有沒有辦法確保機器上的版本一致?(這可能看似OT,但正確的軟件包安裝包括正確版本的可用性。)
包是否可用于給定的操作系統?不幸的是,并非所有軟件包都可以跨平臺使用 這可以追溯到第5步。如果可能,嘗試通過切換到適當的包裝風格或在某些情況下關閉依賴關系來找到處理不同操作系統的方法。
遇到這個問題后,其中一些步驟變得相當常規。盡管#7似乎是一個很好的起點,但它們的排列順序與我使用它們的頻率大致相同。

TA貢獻1846條經驗 獲得超7個贊
如果在檢查包裝時發生這種情況(R CMD檢查),請查看您的NAMESPACE。
您可以通過將以下語句添加到NAMESPACE來解決此問題:
exportPattern("^[^\\\\.]")
這會導出所有不以點(“?!保╅_頭的內容。這允許您從點開始隱藏功能:
.myHiddenFunction <- function(x) cat("my hidden function")
- 4 回答
- 0 關注
- 10083 瀏覽
添加回答
舉報