found an S4 version of 'simulate' so it has not been imported correctly
我寫的R包,其中包括用於模擬()方法作爲S3方法的定義很困惑。由於仿真通用已經定義,我只需定義一個simulate.myclass(在我的情況下爲simulate.fitContinuous)。
該軟件包還取決於另一個具有S4版本模擬的軟件包。加載我的軟件包時,出現上面的S4版本錯誤。我不確定是什麼導致了錯誤。
重複的例子,通過抓住package from github,或做
require(devtools)
install_github("pmc", "cboettig")
require(pmc)
從頭再現此錯誤:創建一個新的包以最小的描述文件。包括DESCRIPTION imports:ouch。創建一個NAMESPACE並添加導入(ouch)和S3method(模擬,測試)。創建將R目錄,添加一個簡單的腳本[R(我已經包括roxygen文件,將產生我剛纔提到的命名空間,但是也可以不devtools/roxygen創造了這個錯誤):
#' simulate
#'
#' a test for s3/s4 conflicts
#' @param object who cares?
#' @param nsim guess.
#' @param seed yup
#' @param ... other parameters we will just ignore
#' @return something
#' @method simulate test
#' @S3method simulate test
#' @import ouch
simulate.test <- function(object, nsim = 1, seed = NULL, ...){
message("This test worked")
}
安裝該軟件包(如果你喜歡,首先使用devtools的文檔),然後你會得到錯誤信息。
到目前爲止,我的最佳解決方案是從NAMESPACE中消除S3method行,然後導出完整的函數simulate.test。這將通過檢查和安裝沒有警告,但顯然是一個劣質的解決方案。
一個不同的解決方案是有依賴以及進口,並正確記錄S3方法(如上所述)。然後一切按預期工作,但警告信息仍然存在。
請注意,使用依賴而不是導入,並保持S3method(模擬,測試)行不會產生任何錯誤,但也不會產生正確的行爲。 – cboettig 2012-01-19 05:34:58