4 回答

TA貢獻(xiàn)1871條經(jīng)驗 獲得超8個贊
在存在NAMESPACE的情況下,另一個問題是你試圖從包foo運行一個未導(dǎo)出的函數(shù)。
例如(人為,我知道,但是):
> mod <- prcomp(USArrests, scale = TRUE)> plot.prcomp(mod)Error: could not find function "plot.prcomp"
首先,你不應(yīng)該直接調(diào)用S3方法,但假設(shè)plot.prcomp
在包foo中實際上是一些有用的內(nèi)部函數(shù)。如果您知道自己在做什么,要調(diào)用此類函數(shù)需要使用:::
。您還需要知道找到該函數(shù)的命名空間。使用getAnywhere()
我們發(fā)現(xiàn)該函數(shù)在包統(tǒng)計中:
> 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>
所以我們現(xiàn)在可以直接調(diào)用它:
> stats:::plot.prcomp(mod)
我plot.prcomp
只是用一個例子來說明目的。在正常使用中,您不應(yīng)該像這樣調(diào)用S3方法。但正如我所說,如果您要調(diào)用的函數(shù)存在(例如它可能是隱藏的實用程序函數(shù)),但是在a中namespace
,R將報告它無法找到該函數(shù),除非您告訴它要查找哪個命名空間。
將此與以下內(nèi)容進(jìn)行比較: stats::plot.prcomp
上述操作失敗,因為在stats
使用時plot.prcomp
,它不會導(dǎo)出,stats
因為錯誤正確地告訴我們:
錯誤:'plot.prcomp'不是'namespace:stats'中的導(dǎo)出對象
這記錄如下:
pkg :: name返回命名空間pkg中導(dǎo)出的變量名的值,而pkg ::: name返回內(nèi)部變量名的值。

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

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