我已经阅读了Roxygen2 PDF以及这个网站,我对@method @ S3method @export和你如何使用它们来正确记录S3方法之间的区别感到迷茫.我
编写了以下示例进行讨论:1.我如何正确记录这些内容?
2.我如何模拟?print和其他通用函数的文档,这些函数显示所有特定于类的实现的用例(即方式?print显示'factor','table','function'的用法)
3.来自wiki页面:"所有导出的方法都需要@ S3method标记.它的格式与@method相同.这会导出方法,而不是函数 - 即泛型(myobject)将起作用,但generic.mymethod(myobject)不会."
我无法解释这一点.这似乎说如果标签指定不正确,函数/方法调用将无法正常工作?具体会打破什么?
MyHappyFunction = function( x , ... )
{
UseMethod( "MyHappyFunction" )
}
MyHappyFunction.lm = function( x , ... )
{
# do some magic
}
Run Code Online (Sandbox Code Playgroud) 我有一个关于UTF-8的问题.在执行roxygen2::roxygenise()我的包之后,它显示警告消息'roxygen2需要编码:UTF-8'.我该如何解决?
roxygen2::roxygenise()
> Writing NAMESPACE
>
> Loading ABXTT
>
> Writing NAMESPACE
>
> Warning message:
>
> roxygen2 requires Encoding: UTF-8
Run Code Online (Sandbox Code Playgroud) RStudio是否支持任何自动化的氧模板创建?
在Emacs-ESS中,C-x C-o将为函数生成一个roxygen模板.例如,它会自动转换为:
foo <- function(x,y) x+y
Run Code Online (Sandbox Code Playgroud)
进入这个:
##' .. content for \description{} (no empty lines) ..
##'
##' .. content for \details{} ..
##' @title
##' @param x
##' @param y
##' @return
##' @author David
foo <- function(x,y) x+y
Run Code Online (Sandbox Code Playgroud)
RStudio中是否存在类似的功能?
更新
C-c C-o C-o我正在开发一个R包,使用devtools,testthat和roxygen2.我在数据文件夹(foo.txt和bar.csv)中有几个数据集.
我的文件结构如下所示:
/ mypackage
/ data
* foo.txt, bar.csv
/ inst
/ tests
* run-all.R, test_1.R
/ man
/ R
Run Code Online (Sandbox Code Playgroud)
我很确定'foo'和'bar'是正确记录的:
#' Foo data
#'
#' Sample foo data
#'
#' @name foo
#' @docType data
NULL
#' Bar data
#'
#' Sample bar data
#'
#' @name bar
#' @docType data
NULL
Run Code Online (Sandbox Code Playgroud)
我想在我的文档示例和单元测试中使用'foo'和'bar'中的数据.
例如,我想通过调用以下方法在我的测试中使用这些数据集:
data(foo)
data(bar)
expect_that(foo$col[1], equals(bar$col[1]))
Run Code Online (Sandbox Code Playgroud)
而且,我希望文档中的示例如下所示:
#' @examples
#' data(foo)
#' functionThatUsesFoo(foo)
Run Code Online (Sandbox Code Playgroud)
如果我在开发包时尝试调用data(foo),我会收到错误"data set'foo'not found".但是,如果我构建软件包,安装它并加载它 - 那么我可以使测试和示例工作.
我目前的解决方法是不运行示例:
#' @examples
#' \dontrun{data(foo)}
#' \dontrun{functionThatUsesFoo(foo)}
Run Code Online (Sandbox Code Playgroud)
在测试中,使用特定于本地计算机的路径预加载数据:
foo …Run Code Online (Sandbox Code Playgroud) 我还没有找到一个合理的工作流程来构建包和编写他们的文档.
我希望尽可能多地自动生成流程(和文档).
显而易见的方法是使用package.skeleton创建基本包文件,然后以编程方式覆盖DESCRIPTION文件和Rd文件.这样做的问题在于您丢失了自动生成的字段,确保您记得记录所有正确的参数.
我想知道你如何构建包和编写文档.有没有可用的工具使这个过程更容易?(roxygen看起来像是为这类东西而设计的;有没有一个很好的教程呢?还有其他选择吗?)
我正在制作我的第一个包rlandscape,使用Roxygen2并试图遵循普通的Roxygen晕影,因为Roxygen2没有.
在插图(第3页)中,我创建了一个名为rlandscape-package.R包含文件的文件.他们说,在小插曲中
每个Roxygen描述块必须后跟一个语句,甚至是描述文件或包代替特定功能的标题材料.roxygen()作为NOOP(空语句)提供,以代替这种情况.
但如果我按照说明块与roxygen()调用package.skeleton产生Error in eval(expr, envir, enclos) : could not find function "roxygen".所以我试着roxygen()完全放弃呼叫以及替换它NA,两者似乎产生相同的结果:package.skeleton()成功地工作(包括rlandscape-package.R作为code_files参数之一),然后我可以roxygenize
> roxygenize("rlandscape", roxygen.dir = "rlandscape")
Updating collate directive in /Users/Gregor/Dropbox/rlandscape/rlandscape/DESCRIPTION
Updating namespace directives
Writing plot.landscape.Rd
Writing rland.Rd
Writing rland.gui.Rd
Writing makePoints.Rd
Writing rCluster.Rd
Writing rlandscape-package.Rd
Writing rlandscape.Rd
Run Code Online (Sandbox Code Playgroud)
它似乎成功运行,但DESCRIPTION文件附加了"Collate"字段,但与package.skeleton创建的字段相同.为什么描述文件的其余部分没有更新?
我有一个函数,我试图用roxygen2记录:
#' Name of function
#'
#' Description
#'
#' @param x The input data
#' @param method one of:
#' "method1" - very long text here
#' "method2" - very long text here
#' "method3" - very long text here
#' "method4" - very long text here
#' "method5" - very long text here
#' "method6" - very long text here
#' "method7" - very long text here
#' "method8" - very long text here
#' "method9" - very …Run Code Online (Sandbox Code Playgroud) 在更新到roxygen2版本6.0.0 之前,似乎使用@export不在包中函数头底部的标记支持的包.例如:
#' Title
#' @param foo
#' @return bar
#'
#' @export
#'
#' @seealso Other blah blah
Run Code Online (Sandbox Code Playgroud)
roxygen2使用我的roxygen25.0.1版安装时,上面的代码将成功构建并正确填写命名空间.但是,随着更新,这种形式的文档将无法正常工作,并将roxygen2其从NAMESPACE.R中主动删除.
我可以通过移动@export到底部来解决这个问题
#' Title
#' @param foo
#' @return bar
#'
#' @seealso Other blah blah
#' @export
Run Code Online (Sandbox Code Playgroud)
我的问题是这个问题是否出现在设计中?我在发行说明中看不到任何指定@export更改的内容:https://github.com/klutometis/roxygen/releases/tag/v6.0.0
这roxygen2是不是应该如何工作和操作直到这一点是无意的?或者这是故意的改变?
NB显然,对于不同版本制作一个完整的mwe是困难的,任何关于如何解决这种欢迎的建议
编辑:经过进一步测试后,我开始怀疑除此之外还有更多的东西.我正在使用rstudio中的构建和文档快捷方式,我最近也更新了,甚至退回到roxygen25.0.1版本也阻止我重建过去工作的旧函数的文档.
我有两种方法用于密切相关的S3泛型(在另一个包中定义),因此我想在同一个Rd文件中记录它们.但是,当我单独记录他们的参数时,我会收到R CMD check关于"文档对象中的重复\参数条目" 的警告
##' Create a ggplot of a Kaplan-Meier Survival curve(s)
##'
##' @param data A \code{survfit} object returned from \code{\link{survfit}}
##' @param \dots Unused
##' @return A ggplot2 object
autoplot.survfit <- function(data, ...) {
NULL
}
##' @rdname autoplot.survfit
##' @param data A \code{\link{survfit.fortify}} object returned from \code{\link{fortify.survfit}}
autoplot.survfit.fortify <- function(data, ...) {
NULL
}
Run Code Online (Sandbox Code Playgroud)
第一个参数必须是data因为这是泛型定义的.但是,对于不同的方法,它的文档是不同的,只是因为它必须是不同的类.我可以有两个单独的文档文件,但它们是紧密耦合的,所以我想将它们保持在一起.我可以data在第一次调用中列出所有可能的类,并且在后续调用中没有任何内容,但这意味着我用第一个函数记录第二个函数而不是将它们全部保存在一起,就像Roxygen一样.
是否有可能通过多种方法获得roxygen来创建合法(不重复参数)?如果没有,处理这种情况的最佳方法是什么?
我正在使用devtools和roxygen2制作R包.我可以使用R CMD获得PDF手册,但我真的很好奇是否可以使用devtools完成.devtools的build(),check(),install()都不是PDF手册.这与制作小插曲有关吗?
我已经阅读并提到了类似的线程包开发:pdf手册和插图的位置