对于使用roxygen(2)记录类,指定标题和描述/细节似乎与函数,方法,数据等相同.但是,插槽和继承是它们自己的动物类型.在roxygen2中记录S4类的最佳实践 - 当前或计划的最佳实践是什么?
尽职调查:
我@slot在早期的roxygen描述中发现了一个标签.
2008 R-forge邮件列表帖
似乎表明这已经死了,并且没有对@slotroxygen的支持:
roxygen2是真的吗?前面提到的帖子建议用户应该使用LaTeX标记创建自己的逐项列表.例如,扩展"character"该类的新S4类将被编码并记录如下:
#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' \describe{
#' \item{myslot1}{A logical keeping track of something.}
#'
#' \item{myslot2}{An integer specifying something else.}
#'
#' \item{myslot3}{A data.frame holding some data.}
#' }
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @exportClass mynewclass
setClass("mynewclass",
representation(myslot1="logical",
myslot2="integer",
myslot3="data.frame"), …Run Code Online (Sandbox Code Playgroud) 经过一番研究后,我找到了防止显示无信息传奇的方法
... + theme(legend.position = "none")
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到themeggplot2的所有可用选项及其默认值?
我已经在SO和其他地方看到了一些关于在未来版本的Roxygen2中应该如何或将要完成的讨论.但是,我被卡住了.我应该如何使用Roxygen2记录S4泛型及其方法?一个全新的通用/方法的工作示例,以及扩展基础S4通用的示例将非常有用.我不想为同一个泛型的每个S4方法制作单独的(大多数)冗余文档.
尽职调查:我已经找到了"提取"方法的有用示例.但是,对于我的问题,它似乎已经过时且不完整.它在类文档中使用@slot标记,但不支持(不再?).它仅显示了核心S4方法"["的扩展,而不是包含S4泛型文档的完整Roxygen示例.
如何正确记录S4"["和"[< - "方法使用roxygen?
如果我用标题,描述完全记录一个新的S4泛型@param @return @name @aliases
@docType @rdname,然后用相应的文档记录S4方法@name @aliases
@docType @rdname,我得到以下R CMD check警告:
* checking for missing documentation entries ... WARNING
Undocumented S4 methods:
<< long list of apparently undocumented methods. E.g. generic 'plot' and siglist 'myClass1,ANY' >>
All user-level objects in a package (including S4 classes and methods)
should have documentation entries.
Run Code Online (Sandbox Code Playgroud)
它首先看起来好像我用这种方式用roxygen2记录的S4方法都没有实际工作.但是,到目前为止,我注意到我的核心方法"show"的扩展没有相关的错误,即使它们的记录方式与其他方法完全相同.以下是我在其中一个show方法中包含的完整roxygen文档的示例,它没有生成遗漏文档错误:
#' @name show
#' @aliases show,myClass2-method
#' @docType methods
#' @rdname show-methods
Run Code Online (Sandbox Code Playgroud)
因此,我很茫然.如您所见,我已经包含了R包手册的S4文档部分中描述的S4方法的别名约定,即方法应该具有以下名称的别名(没有空格):
generic,signature_list-method.
Run Code Online (Sandbox Code Playgroud)
不知何故,这并没有被完全理解 …
我正在寻找合适的正则表达式.下列
t1 = c("IGF2, IGF2AS, INS, TH", "TH", "THZH", "ZGTH")
grep("TH",t1, value=T)
Run Code Online (Sandbox Code Playgroud)
返回所有元素t1,但只有第一个和第二个是正确的.我只想要带有单词/短语的条目TH返回?
R中的基本/公共类被称为"dist",并且是对称距离矩阵的相对有效的表示."matrix"但是,与对象不同,似乎不支持"dist"使用"["运算符通过索引对操作实例.
例如,以下代码不返回任何内容NULL,或错误:
# First, create an example dist object from a matrix
mat1 <- matrix(1:100, 10, 10)
rownames(mat1) <- 1:10
colnames(mat1) <- 1:10
dist1 <- as.dist(mat1)
# Now try to access index features, or index values
names(dist1)
rownames(dist1)
row.names(dist1)
colnames(dist1)
col.names(dist1)
dist1[1, 2]
Run Code Online (Sandbox Code Playgroud)
同时,在某种意义上,以下命令可以正常工作,但不要使访问/操作特定索引对值更容易:
dist1[1] # R thinks of it as a vector, not a matrix?
attributes(dist1)
attributes(dist1)$Diag <- FALSE
mat2 <- as(dist1, "matrix")
mat2[1, 2] <- 0
Run Code Online (Sandbox Code Playgroud)
一个解决方法 - …
一个简单的例子是我创建了一个扩展名show,这是一个S4基本方法.我不希望通过show在我的包中重新记录来导致消除歧义,我还想通过添加别名来合并我的扩展show的文档到新类的文档myPkgSpClass中show,myPkgSpClass-method.
#' @export
#' @aliases show,myPkgSpClass-method
#' @rdname myPkgSpClass-class
setMethod("show", "myPkgSpClass", function(object){ show(NA) })
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,这会在roxygen2构建文档期间导致严重警告,Rd files with duplicated alias 'show':因为show此包中有多个类扩展,并且roxygen2已自动将别名列表中的通用术语添加到所有相关*-class.Rd文件:
\alias{show}
\alias{show,myPkgSpClass-method}
Run Code Online (Sandbox Code Playgroud)
但我认为我不想在任何实例中使用通用别名,因为它会强制需要show在我的包和基础之间消除歧义show.此问题也适用于从其他包扩展的其他S4方法show.
如果我将所有特定于类的方法标记到同一个.Rd文件中,那么警告就会消失,但是模糊性仍然存在,因为show别名仍会自动添加到该文档条目中.如果我手动\alias{show}从.Rd文件中删除,那么问题似乎已解决,在roxygen期间没有警告R CMD check pkgname.那么如何让Roxygen2不添加通用别名呢?
其他背景:
这是从前一个问题构建的特定问题,用于将S4扩展导出/记录到基本方法: 是否需要在R包中导出基本方法扩展?文档含义?
关于使用Roxygen2记录S4方法/类的以下问题,它更具体,而不是包含在内:
我正在构建一个包来处理最多 4 种不同类型的数据。这些类型中的每一种都是矩阵、数据框或树形式的合法类。根据数据处理方式和其他实验因素,其中一些数据组件可能会丢失,但能够将此信息存储为特殊类的实例并具有识别不同组件的方法仍然非常有用数据。
方法一:
我尝试了一种增量继承结构,它看起来像嵌套树,其中数据类型的每种组合都有其自己的显式定义的类。这似乎很难在未来扩展更多的数据类型,并且对于新开发人员来说,学习所有类名称也具有挑战性,无论这些名称组织得多么好。
方法2:
第二种方法是创建一个单一的“主类”,其中包含用于所有 4 种数据类型的槽。为了允许缺失数据实例的槽为 NULL,似乎有必要首先在类NULL和新数据类型类之间定义一个虚拟类联合,然后使用该虚拟类联合作为相关类的预期类。大师班的插槽。这是一个示例(假设每个数据类型类已定义):
################################################################################
# Use setClassUnion to define the unholy NULL-data union as a virtual class.
################################################################################
setClassUnion("dataClass1OrNULL", c("dataClass1", "NULL"))
setClassUnion("dataClass2OrNULL", c("dataClass2", "NULL"))
setClassUnion("dataClass3OrNULL", c("dataClass3", "NULL"))
setClassUnion("dataClass4OrNULL", c("dataClass4", "NULL"))
################################################################################
# Now define the master class with all 4 slots, and
# also the possibility of empty (NULL) slots and an explicity prototype for
# slots to be set to NULL if they are not provided at instantiation.
################################################################################
setClass(Class="theMasterClass", …Run Code Online (Sandbox Code Playgroud)