Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Roxygen正确地记录来自不同包的泛型的S3方法?_R_Roxygen - Fatal编程技术网

如何使用Roxygen正确地记录来自不同包的泛型的S3方法?

如何使用Roxygen正确地记录来自不同包的泛型的S3方法?,r,roxygen,R,Roxygen,我正在编写一个包,其中定义了一个新类,即测量者,以及为此定义的print方法,即print.explorer。我的代码运行良好,我使用roxygen进行内联文档。但是R CMD check发出警告: 在中使用的函数/方法 文件对象“打印测量员” 但不是在代码中:打印 我用哈德利的以下两页作为灵感: 并且,这两个都表明正确的语法是@method function name class 所以我的问题是:使用Roxygen为我的新类记录print方法的正确方法是什么?更具体地说,我如何摆脱警告? 这

我正在编写一个包,其中定义了一个新类,即测量者,以及为此定义的
print
方法,即
print.explorer
。我的代码运行良好,我使用roxygen进行内联文档。但是
R CMD check
发出警告:

在中使用的函数/方法 文件对象“打印测量员” 但不是在代码中:打印

我用哈德利的以下两页作为灵感: 并且,这两个都表明正确的语法是
@method function name class

所以我的问题是:使用Roxygen为我的新类记录
print
方法的正确方法是什么?更具体地说,我如何摆脱警告?


这是我的代码:(注释过的文档表示试图修复此问题,但没有一个成功。)

更新 从roxygen2>3.0.0开始,该软件包在为您解决所有这些问题方面变得更加智能。您现在只需要
@export
标签,roxygen将确定您正在记录的内容,并在转换过程中编写
名称空间时执行适当的操作

在某些例外情况下,您可能需要帮助roxygen。Hadley Wickham在他的R软件包书中使用的一个函数是
all.equal.data.frame
。该函数名中存在关于什么是类和什么是泛型函数的歧义(
all
all.equal
,或
all.equal.data

在这种情况下,您可以通过明确通知roxygen的泛型和类/方法来帮助它,例如

@method all.equal data.frame
如果需要显式使用
@method
,下面的原始答案将解释更多有关旧行为的信息


起初的 应使用
@方法
标记记录该函数:

#' @method print surveyor
在最初阅读时,@hadley的文档让我有点困惑,因为我不熟悉roxygen,但在几次阅读该部分后,我想我理解了您需要
@method
的原因

您正在为
print
方法编写完整的文档
@S3method
命名空间
相关,并安排要导出的方法
@S3method
不用于记录方法

您的Rd文件应在
用法
部分包含以下内容:

\method{print}{surveyor}(x, ...)

如果工作正常,这是在Rd文件中记录S3方法的正确方法。

从roxygen2>3.0.0开始,您只需要
@export
,因为roxygen可以确定
print.explorer
是S3方法。这意味着您现在只需要

#' Prints surveyor object.
#' 
#' @param x surveyor object
#' @param ... ignored
#' @export
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}
#“打印测量器对象。
#' 
#“@param x测量器对象
#“@param。。。忽略
#“@出口

print.surveyor
@export
仅在加载泛型时有效。如果泛型在另一个包中,则需要导入泛型。对于当前的roxygen,这可以通过类似

#@从可存储数据帧导入
#“@出口
tibble::数据帧

摘自。在本例中,将从tibble包导入
data\u frame
方法,并导出tibble::data\u frame。这些重新导出的对象随后被记录在一个
reexports.Rd
文件中,不用说,该文件满足R CMD检查。

谢谢,我也一直在努力解决这个问题,但是如何将其用于特定于类的[-函数,例如
[.myClass
?此解决方案通过
R CMD检查
,但没有警告,但生成的Rd标记乱七八糟。
@method[myClass
变成
\method{[}{myClass}(x,i,j,…)
@Backlin这有什么问题吗?这看起来是在Rd中标记和S3方法的正确方法。它将在使用部分正确呈现,但在使用代码上方有
##S3方法等等。哦,不,我的错!我在旧版本的R中查看文档,但在新版本中正确呈现。希望我没有在这上面浪费了太多时间。@Backlin-别担心。很高兴问答对你有用。@cboetti是的,
@method
是文档的标签(
.Rd
文件)而
@S3method
用于命名空间机制。如果您有自己的
命名空间
文件,则这两天都需要。如果您确实想使方法在包的命名空间之外可见,则只需
@export
。整洁。谢谢。我会立即尝试!嗯。我想注册一个S3方法而不必公开rting。不幸的是,这会产生一个弃用警告。有没有办法解决这个问题?@KonradRudolph注册一个S3方法而不导出它意味着什么?@hadley我想避免使用
@export
,因为
R CMD check
抱怨没有记录的参数(我没有记录该方法,因为它应该是不可见的)。但是,我现在无法复制此内容:没有生成
.Rd
文件,并且没有显示缺少参数的
R CMD check
警告。我可能事先在文档注释中有一些空行,导致此方法生成的文档不完整。
\method{print}{surveyor}(x, ...)
#' Prints surveyor object.
#' 
#' @param x surveyor object
#' @param ... ignored
#' @export
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}
#' @export
print.surveyor <- function(x, ...){
    cat("Surveyor\n\n")
    print.listof(x)
}