2011-10-13 68 views
6

我正在開發一個提供名爲「Foo」的S3類的包。它還提供了一個「as」方法將它強制轉移到名爲「Bar」的(別人的)S4類。我的代碼如下所示:用Roxygen記錄setAs()和setOldClass()

#' ... 
setOldClass("Foo") 

#' ... 
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
    # do stuff and return a SpatialPointsDataFrame 
}) 

編輯我已經試過這樣:

#' ... 
#' @name as 
#' @export 
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
    # do stuff and return a SpatialPointsDataFrame 
}) 

但後來我得到這個來自R CMD檢查:

檢查是否命名空間可以加載聲明的依賴關係...警告 名稱空間導出(ns,exports)中的錯誤:undefined exports:as 調用:loadNamespace - > namespaceExport 執行停止

命名空間必須能夠在加載基本命名空間的情況下加載:否則,如果命名空間被保存的對象加載,會話將無法啓動。

可能有些導入需要在NAMESPACE文件中聲明。

在一個單獨的.R文件

,我有:

#' @importClassesFrom sp SpatialPointsDataFrame 

我使用哈德利的devtools包,所以我想這是roxygen2。這是我做的:

R> document("MyPackage") 
+0

哈德利的devtools包。編輯以顯示最佳嘗試。 – dholstius

+0

很好的編輯。如果這個問題很快得不到解決,我會很驚訝。 –

回答

5

的roxygen2解析器不解析setOldClass()setAs()。 我們需要獲得適當的@name標籤。

#' "Foo" class 
#' 
#' @name Foo-class 
#' @aliases Foo 
#' @family Foo 
#' 
#' @exportClass Foo 
setOldClass("Foo") 

#' As("Foo", "SpatialPointsDataFrame") 
#' 
#' @name as 
#' @family Foo 
#' 
#' @importClassesFrom sp SpatialPointsDataFrame 
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
    # do stuff and return a SpatialPointsDataFrame 
}) 

我不知道詳細setAs()功能,但as()功能從方法包加載。 因此,我認爲NAMESPACE中我們不需要export(as)條目。

+0

不是真正的roxygen pro,這個問題很老,但是......'setAs()'在'coerce'上創建一個方法,簽名爲'coerce,Foo,SpatilPointsDataFrame',所以你需要'@name coerce '並且可能是'@aliases coerce,Foo,SpatilPointsDataFrame-method'。你想用'@exportMethods coerce'來公開。 –