首页 > 解决方案 > AnnotationForge 函数 makeOrgPackage 中的“重复行”错误

问题描述

我正在使用 AnnotationForge 包创建一个有机体包,特别是函数 makeOrgPackage。我一直在关注这个小插曲:https ://www.bioconductor.org/packages/release/bioc/vignettes/AnnotationForge/inst/doc/MakingNewOrganismPackages.html

当我调用函数时:

makeOrgPackage(gene_info=PA14Sym, chromosome=PA14Chr, go=PA14Go,
               version="0.1",
               maintainer="myname <email@university.edu>",
               author="myname <email@university.edu>",
               outputDir = ".",
               tax_id="208963",
               genus="Pseudomonas",
               species="aeruginosa",
               goTable="go")

我收到此错误:

Error in FUN(X[[i]], ...) : data.frames in '...' cannot contain duplicated rows

“...”是指包含注释数据的数据框集。我已确保这些数据帧与小插图中的示例具有完全相同的结构。在“gene_info”和“chromosome” dfs 中,我删除了所有重复的行。

“go” df 在“GID”(基因 ID)列中具有重复值,但所有 GO 值都是唯一的,并且我检查过不存在重复的行。例如:

    GID         GO          EVIDENCE
1   PA14_00010  GO:0005524  ISM
2   PA14_00010  GO:0006270  ISM
3   PA14_00010  GO:0006275  ISM
4   PA14_00010  GO:0043565  ISM
5   PA14_00010  GO:0003677  ISM
6   PA14_00010  GO:0003688  ISM
7   PA14_00020  GO:0003677  ISM
8   PA14_00020  GO:0006260  ISM

插图提供的样本雀科数据也是如此;重复的 GID,但唯一的 GO 编号。令人沮丧的是,当我为小插图中的示例数据运行 makeOrgPackage 函数时,没有错误。我在这里想念什么?

完整脚本:

# Load in GO annotated PA14 file, downloaded from Psuedomonas.com
PA14file <- read.csv("../data/GO_annotations/GO_PA14.csv")
colnames(PA14file)
> colnames(PA14file)
[1] "LocusTag"                "GeneName"                "ProductDescription"     
 [4] "StrainName"              "Accession"               "GOTerm"                 
 [7] "Namespace"               "GOEvidenceCode"          "EvidenceOntologyECOCode"
[10] "EvidenceOntologyTerm"    "SimilarToBindsTo"        "PMID"                   
[13] "chrom" 

# PA14 only has 1 chromosome, so create a new column and populate it with 1s.
PA14file$chrom <- '1'

# Create gene_info df, remove duplicate rows
PA14Sym <- PA14file[,c("LocusTag", "GeneName", "ProductDescription")]
PA14Sym <- PA14Sym[PA14Sym[,"GeneName"]!="-",]
PA14Sym <- PA14Sym[PA14Sym[,"ProductDescription"]!="-",]
colnames(PA14Sym) <- c("GID","SYMBOL","GENENAME")
PA14Sym <- PA14Sym[!duplicated(PA14Sym), ]

# Create chromosome df, remove duplicate rows
PA14Chr <- PA14file[,c("LocusTag", "chrom")]
PA14Chr <- PA14Chr[PA14Chr[,"chrom"]!="-",]
colnames(PA14Chr) <- c("GID","CHROMOSOME")
PA14Chr %>% distinct(GID, .keep_all = TRUE)
PA14Chr <- PA14Chr[!duplicated(PA14Chr), ]

# Create go df
PA14Go <- PA14file[,c("LocusTag", "Accession", "GOEvidenceCode")]
PA14Go <- PA14Go[PA14Go[,"GOEvidenceCode"]!="",]
colnames(PA14Go) <- c("GID","GO","EVIDENCE")

# Call the function
makeOrgPackage(gene_info=PA14Sym, chromosome=PA14Chr, go=PA14Go,
               version="0.1",
               maintainer="myname <email@university.edu>",
               author="myname <email@university.edu>",
               outputDir = ".",
               tax_id="208963",
               genus="Pseudomonas",
               species="aeruginosa",
               goTable="go")

标签: rdatabaseannotations

解决方案


我今天也遇到了这个问题,刚改用dplyr中的distinct()后,这个函数就可以正常工作了。(我的函数和你的一样。)

%>% dplyr::distinct()只需尝试在所有操作之后在创建或使用的每个部分的尾部添加一块,dplyr::distinct()以删除变量中的重复项。

在你的情况下:

library(dplyr)
PA14Sym <- dplyr::distinct(PA14Sym)
PA14Chr <- dplyr::distinct(PA14Chr)
PA14Go <- dplyr::distinct(PA14Go)

希望这些可以帮助你。


推荐阅读