【问题标题】:Include an S4 object from an existing package as a slot in a new S4 class将现有包中的 S4 对象作为插槽包含在新的 S4 类中
【发布时间】:2016-06-18 12:33:39
【问题描述】:

我正在编写一个名为 Expression 的 S4 类,并希望包含一个 S4 对象 DESeq2 = "DESeqDataSet" 作为插槽:

setClass(
Class = "Expression",
representation = representation (
    species = "character", 
    edgeR = "DGEList",
    DESeq2 = "DESeqDataSet",
    lengths = "matrix",
    individuals = "vector",
    treatments = "vector",
    id = "vector",
    samples = "vector",
    sample_prep = "vector",
    genome_type = "vector",
    molecule_type = "vector",
    blast_hit =  "vector",
    rRNA = "vector",
    protein = "vector"
))

但是,当我检查包裹时,我收到以下警告:

Found the following significant warnings:
  Warning: undefined slot classes in definition of "Expression": DESeq2(class "DESeqDataSet")

该类工作正常(即,现在有错误),但我想修复我们代码中的所有警告。

带有DESeqDataSet 对象(DESeq2,也是我们给插槽的名称)的包被导入包DESCRIPTION 文件中。我是否需要做其他事情才能使其内容可在插槽中使用?例如,我使用setOldClass() 使 S3 类可用于 S4 插槽。

这是一个引发警告的 travis-ci 构建示例 - https://travis-ci.org/caseywdunn/agalmar/builds/138564256

给出问题的完整代码位于https://github.com/caseywdunn/agalmar/blob/a7c4013fcb5c924cfd6e1aa8e99f182ceec6fe20/R/utility_functions.R

【问题讨论】:

    标签: r class s4


    【解决方案1】:

    类定义需要导入,就像函数、泛型和方法一样。所以在 NAMESPACE 文件中说

    importClassesFrom("DESeq2", "DESeqDataSet")
    

    我相信 roxygen2 表示法是 @importClassesFrom DESeq2 DESeqDataSet

    【讨论】:

    • 非常有帮助 - 谢谢。我在课堂文档中添加了 roxygen2 行,警告消失了。非常感谢。
    • 我试过了,但错误并没有消失。后来我发现这是因为我没有在DESCRIPTION文件中手动包含Imports: ....
    【解决方案2】:

    您可以通过使用 setClass 函数的“contains”参数来解决您的问题。包含可以定义任何类型或对象。

    setClass(
    Class = "Expression",
    representation = representation (
        species = "character", 
        edgeR = "DGEList",
        DESeq2 = "DESeqDataSet",
        lengths = "matrix",
        individuals = "vector",
        treatments = "vector",
        id = "vector",
        samples = "vector",
        sample_prep = "vector",
        genome_type = "vector",
        molecule_type = "vector",
        blast_hit =  "vector",
        rRNA = "vector",
        protein = "vector"
        ), 
        contains = c("DGEList", "DESeqDataSet")
    )
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      相关资源
      最近更新 更多