由於roxygen2
版本4.0.0
,@S3method
標記已被棄用,以支持使用@export
。使用roxygen2 v4在名稱中導出非S3方法
該程序包現在會嘗試檢測函數是否爲S3方法,並且如果認爲它是1,則會自動將S3method(function,class)
行添加到NAMESPACE
文件。
問題是,如果函數不是S3方法,但其名稱包含.
,則roxygen有時會出錯並在不應該時添加該行。
有沒有辦法告訴roxygen函數不是S3方法?
根據要求,這裏有一個可重複的例子。
我有一個軟件包,導入R.oo
,功能名爲check.arg
。
library(roxygen2)
package.skeleton("test")
cat("Imports: R.oo\n", file = "test/DESCRIPTION", append = TRUE)
writeLines(
"#' Check an argument
#'
#' Checks an argument.
#' @param ... Some arguments.
#' @return A value.
#' @export
check.arg <- function(...) 0",
"test/R/check.arg.R"
)
roxygenise("test")
現在命名空間包含行S3method(check,arg)
。
check
是R.oo
中的S3通用,所以roxygen試圖做個聰明的人,猜測我希望check.arg
成爲S3方法。不幸的是,這些功能是不相關的,所以我不這樣做。
(搶佔建議,我只是重新命名check.arg
:這是別人寫的遺留代碼,我創建了一個checkArg
替代品,但我需要離開check.arg
爲兼容性推薦的函數。)
我相信你只是使用'@出口'與函數的全名。包含[可重現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)來測試會很有幫助。 – MrFlick
@MrFlick謝謝你的解決方案,謝謝你提醒我不要懶惰。 –