大数据文件的循环函数i r代码
我有同样的问题,但数据是巨大的,并创造了一定的问题。 我的数据就像大数据文件的循环函数i r代码,r,loops,biomart,R,Loops,Biomart,我有同样的问题,但数据是巨大的,并创造了一定的问题。 我的数据就像 1 10000 11000 1 20000 21000 . . . . . . . . . 1 1000000 1001000 densembldb将创建一个本地ensembl数据库,该数据库非常容易查询。我也非常喜欢plyranges,它允许我们使用类似SQL(和dplyr)的语言对genomarranges对象进行连接,这是基因组坐
1 10000 11000
1 20000 21000
. . .
. . .
. . .
1 1000000 1001000
d
ensembldb
将创建一个本地ensembl数据库,该数据库非常容易查询。我也非常喜欢plyranges
,它允许我们使用类似SQL(和dplyr)的语言对genomarranges
对象进行连接,这是基因组坐标的默认Bioconductor类
首先,我们将调用/安装必要的软件包:
if(!require(tidyverse)) install.packages("tidyverse")
if(!require(AnnotationHub)) BiocManager::install("AnnotationHub")
if(!require(ensembldb)) BiocManager::install("ensembldb")
if(!require(plyranges)) BiocManager::install("plyranges")
在这里,我查询AnnotationHub
,找到我们想要下载的特定数据库,然后下载它
ah <- AnnotationHub()
#> snapshotDate(): 2020-04-27
query <- query(ah, "EnsDb", "Sus scrofa")
tibble(id = query$ah_id, title = query$title) %>%
dplyr::filter(str_detect(title, "Sus scrofa"))
#> # A tibble: 7 x 2
#> id title
#> <chr> <chr>
#> 1 AH64991 Ensembl 94 EnsDb for Sus scrofa
#> 2 AH68020 Ensembl 95 EnsDb for Sus scrofa
#> 3 AH69274 Ensembl 96 EnsDb for Sus scrofa
#> 4 AH73969 Ensembl 97 EnsDb for Sus scrofa
#> 5 AH75101 Ensembl 98 EnsDb for Sus scrofa
#> 6 AH78892 Ensembl 99 EnsDb for Sus scrofa
#> 7 AH79797 Ensembl 100 EnsDb for Sus scrofa
edb <- ah[["AH79797"]]
#> loading from cache
最后,一步是连接我们的基因组区域和注释基因信息:
gene_overlap <- join_overlap_left(gen_regions, genes)
gene_overlap
#> GRanges object with 12 ranges and 8 metadata columns:
#> seqnames ranges strand | gene_id gene_name
#> <Rle> <IRanges> <Rle> | <character> <character>
#> [1] 1 10000-11000 * | ENSSSCG00000037372
#> [2] 1 20000-21000 * | ENSSSCG00000037372
#> [3] 1 1000000-1001000 * | <NA> <NA>
#> [4] 2 0-100000 * | ENSSSCG00000014554
#> [5] 2 0-100000 * | ENSSSCG00000014555 ODF3
#> ... ... ... ... . ... ...
#> [8] 2 0-100000 * | ENSSSCG00000014565
#> [9] 2 0-100000 * | ENSSSCG00000014558 SIRT3
#> [10] 2 0-100000 * | ENSSSCG00000014559 PSMD13
#> [11] 2 0-100000 * | ENSSSCG00000014561 NLRP6
#> [12] 2 0-100000 * | ENSSSCG00000025023 PGGHG
#> gene_biotype seq_coord_system
#> <character> <character>
#> [1] protein_coding chromosome
#> [2] protein_coding chromosome
#> [3] <NA> <NA>
#> [4] protein_coding chromosome
#> [5] protein_coding chromosome
#> ... ... ...
#> [8] protein_coding chromosome
#> [9] protein_coding chromosome
#> [10] protein_coding chromosome
#> [11] protein_coding chromosome
#> [12] protein_coding chromosome
#> description
#> <character>
#> [1] NULL
#> [2] NULL
#> [3] <NA>
#> [4] secretoglobin family 1C member 1 [Source:NCBI gene;Acc:100517148]
#> [5] outer dense fiber of sperm tails 3 [Source:NCBI gene;Acc:100499231]
#> ... ...
#> [8] interferon-induced transmembrane protein 1 [Source:NCBI gene;Acc:100127358]
#> [9] sirtuin 3 [Source:NCBI gene;Acc:100125971]
#> [10] proteasome 26S subunit, non-ATPase 13 [Source:NCBI gene;Acc:100517815]
#> [11] NLR family pyrin domain containing 6 [Source:NCBI gene;Acc:100519245]
#> [12] protein-glucosylgalactosylhydroxylysine glucosidase [Source:NCBI gene;Acc:100518005]
#> gene_id_version symbol entrezid
#> <character> <character> <list>
#> [1] ENSSSCG00000037372.2 NA
#> [2] ENSSSCG00000037372.2 NA
#> [3] <NA> <NA>
#> [4] ENSSSCG00000014554.4 100517148
#> [5] ENSSSCG00000014555.4 ODF3 100499231
#> ... ... ... ...
#> [8] ENSSSCG00000014565.3 100519082,100127358
#> [9] ENSSSCG00000014558.4 SIRT3 100125971
#> [10] ENSSSCG00000014559.4 PSMD13 100517815
#> [11] ENSSSCG00000014561.5 NLRP6 100519245
#> [12] ENSSSCG00000025023.3 PGGHG 100518005
#> -------
#> seqinfo: 2 sequences from an unspecified genome; no seqlengths
gene\u重叠GRanges对象,包含12个范围和8个元数据列:
#>seqnames范围链|基因_id基因_名称
#> |
#>[1]1 10000-11000*| ENSSCG00000037372
#>[2]1 20000-21000*| ENSSCG00000037372
#> [3] 1 1000000-1001000 * |
#>[4]2 0-100000*| ENSSCG00000014554
#>[5]2 0-100000*| ENSSCG00000014555 ODF3
#> ... ... ... ... . ... ...
#>[8]2 0-100000*| ENSSCG00000014565
#>[9]2 0-100000*| ENSSCG00000014558 SIRT3
#>[10]2 0-100000*| ENSSCG00000014559 PSMD13
#>[11]2 0-100000*| ENSSCG00000014561 NLRP6
#>[12]2 0-100000*| ENSSCG00000025023 PGGHG
#>基因型seq_-coord_系统
#>
#>[1]蛋白质编码染色体
#>[2]蛋白质编码染色体
#> [3]
#>[4]编码蛋白质的染色体
#>[5]蛋白质编码染色体
#> ... ... ...
#>[8]编码蛋白质的染色体
#>[9]编码蛋白质的染色体
#>[10]蛋白质编码染色体
#>[11]编码蛋白质的染色体
#>[12]编码蛋白质的染色体
#>描述
#>
#>[1]无效
#>[2]空
#> [3]
#>[4]分泌珠蛋白家族1C成员1[来源:NCBI基因;Acc:100517148]
#>[5]精子尾部的外层致密纤维3[来源:NCBI基因;Acc:100499231]
#> ... ...
#>[8]干扰素诱导的跨膜蛋白1[来源:NCBI基因;Acc:100127358]
#>[9]sirtuin 3[来源:NCBI基因;Acc:100125971]
#>[10]蛋白酶体26S亚单位,非ATP酶13[来源:NCBI基因;Acc:100517815]
#>[11]NLR家族pyrin结构域包含6个[来源:NCBI基因;Acc:100519245]
#>[12]蛋白质葡萄糖基半乳糖基羟基赖氨酸葡萄糖苷酶[来源:NCBI基因;Acc:100518005]
#>基因id版本符号entrezid
#>
#>[1]ENSSCG00000037372.2 NA
#>[2]ENSSCG00000037372.2 NA
#> [3]
#>[4]ENSSCG00000014554.4 100517148
#>[5]ENSSCG00000014555.4 ODF3 100499231
#> ... ... ... ...
#>[8]ENSSCG00000014565.3 100519082100127358
#>[9]ENSSCG00000014558.4 SIRT3 100125971
#>[10]ENSSCG00000014559.4 PSMD13 100517815
#>[11]ENSSCG00000014561.5 NLRP6 100519245
#>[12]ENSSCG00000025023.3 PGGHG 100518005
#> -------
#>seqinfo:来自未指定基因组的2个序列;没有长度
此表已采用“整洁”格式,但您可能希望对其进行汇总,使每个区域都有一行。以下是如何做到这一点的建议:
per_region_genes <- gene_overlap %>%
as_tibble() %>%
mutate(gene_name = ifelse(gene_name == "", NA, gene_name)) %>%
group_by(seqnames, start, end) %>%
summarize(gene_ids = paste(na.exclude(gene_id), collapse = ", "),
gene_names = paste(na.exclude(gene_name), collapse = ", "), .groups = "drop")
per_region_genes
#> # A tibble: 4 x 5
#> seqnames start end gene_ids gene_names
#> <fct> <int> <int> <chr> <chr>
#> 1 1 10000 1.10e4 "ENSSSCG00000037372" ""
#> 2 1 20000 2.10e4 "ENSSSCG00000037372" ""
#> 3 1 1000000 1.00e6 "" ""
#> 4 2 0 1.00e5 "ENSSSCG00000014554, ENSSSCG000… "ODF3, RIC8A, SIRT3,…
per_区域基因%
as_tible()%>%
突变(基因名=ifelse(基因名=“”,NA,基因名))%>%
分组依据(序号名称、开始、结束)%>%
总结(gene_id=粘贴(na.exclude(gene_id)),collapse=“,”,
基因名称=粘贴(na.exclude(基因名称),collapse=“,”,.groups=“drop”)
per_区基因
#>#A tibble:4 x 5
#>seqnames开始结束基因\u id基因\u名称
#>
#>1 10000 1.10e4“ENSSCG00000037372”
#>2 1 20000 2.10e4“ENSSCG00000037372”
#>3 1100万1.00e6“
#>4 2 0 1.00e5“ENSSCG00000014554,ENSSCG000…”ODF3,RIC8A,SIRT3,…
(1)“巨大”有多大?(2) 如果在整个帧上使用应用
,如果其中包含非数值
数据,则成本可能会很高:它总是将帧转换为矩阵
,如果不是所有相同的类
,则会进行转换。(对于大的ish帧,它可能会很昂贵,因为它会复制一个副本。)(3)如果您的数据真的很“大”,您可能会受益于使用data.table
,因为它往往更节省内存(正确使用时会更快)。查询数量不会超过25000。我已经在500个查询上测试了代码,它运行得非常顺利。是指使用data.table读取我的文件?如果有错误,请纠正我
genes <- genes(edb)
gene_overlap <- join_overlap_left(gen_regions, genes)
gene_overlap
#> GRanges object with 12 ranges and 8 metadata columns:
#> seqnames ranges strand | gene_id gene_name
#> <Rle> <IRanges> <Rle> | <character> <character>
#> [1] 1 10000-11000 * | ENSSSCG00000037372
#> [2] 1 20000-21000 * | ENSSSCG00000037372
#> [3] 1 1000000-1001000 * | <NA> <NA>
#> [4] 2 0-100000 * | ENSSSCG00000014554
#> [5] 2 0-100000 * | ENSSSCG00000014555 ODF3
#> ... ... ... ... . ... ...
#> [8] 2 0-100000 * | ENSSSCG00000014565
#> [9] 2 0-100000 * | ENSSSCG00000014558 SIRT3
#> [10] 2 0-100000 * | ENSSSCG00000014559 PSMD13
#> [11] 2 0-100000 * | ENSSSCG00000014561 NLRP6
#> [12] 2 0-100000 * | ENSSSCG00000025023 PGGHG
#> gene_biotype seq_coord_system
#> <character> <character>
#> [1] protein_coding chromosome
#> [2] protein_coding chromosome
#> [3] <NA> <NA>
#> [4] protein_coding chromosome
#> [5] protein_coding chromosome
#> ... ... ...
#> [8] protein_coding chromosome
#> [9] protein_coding chromosome
#> [10] protein_coding chromosome
#> [11] protein_coding chromosome
#> [12] protein_coding chromosome
#> description
#> <character>
#> [1] NULL
#> [2] NULL
#> [3] <NA>
#> [4] secretoglobin family 1C member 1 [Source:NCBI gene;Acc:100517148]
#> [5] outer dense fiber of sperm tails 3 [Source:NCBI gene;Acc:100499231]
#> ... ...
#> [8] interferon-induced transmembrane protein 1 [Source:NCBI gene;Acc:100127358]
#> [9] sirtuin 3 [Source:NCBI gene;Acc:100125971]
#> [10] proteasome 26S subunit, non-ATPase 13 [Source:NCBI gene;Acc:100517815]
#> [11] NLR family pyrin domain containing 6 [Source:NCBI gene;Acc:100519245]
#> [12] protein-glucosylgalactosylhydroxylysine glucosidase [Source:NCBI gene;Acc:100518005]
#> gene_id_version symbol entrezid
#> <character> <character> <list>
#> [1] ENSSSCG00000037372.2 NA
#> [2] ENSSSCG00000037372.2 NA
#> [3] <NA> <NA>
#> [4] ENSSSCG00000014554.4 100517148
#> [5] ENSSSCG00000014555.4 ODF3 100499231
#> ... ... ... ...
#> [8] ENSSSCG00000014565.3 100519082,100127358
#> [9] ENSSSCG00000014558.4 SIRT3 100125971
#> [10] ENSSSCG00000014559.4 PSMD13 100517815
#> [11] ENSSSCG00000014561.5 NLRP6 100519245
#> [12] ENSSSCG00000025023.3 PGGHG 100518005
#> -------
#> seqinfo: 2 sequences from an unspecified genome; no seqlengths
per_region_genes <- gene_overlap %>%
as_tibble() %>%
mutate(gene_name = ifelse(gene_name == "", NA, gene_name)) %>%
group_by(seqnames, start, end) %>%
summarize(gene_ids = paste(na.exclude(gene_id), collapse = ", "),
gene_names = paste(na.exclude(gene_name), collapse = ", "), .groups = "drop")
per_region_genes
#> # A tibble: 4 x 5
#> seqnames start end gene_ids gene_names
#> <fct> <int> <int> <chr> <chr>
#> 1 1 10000 1.10e4 "ENSSSCG00000037372" ""
#> 2 1 20000 2.10e4 "ENSSSCG00000037372" ""
#> 3 1 1000000 1.00e6 "" ""
#> 4 2 0 1.00e5 "ENSSSCG00000014554, ENSSSCG000… "ODF3, RIC8A, SIRT3,…