跳到正文
0.16.6 文档

本页完整说明已译为现代汉语;函数、参数、代码和原始数据标识保留原样。 使用教程

全站目录 · 按任务查找

对明确请求的序列对,连接属于同一已声明分组的注释区间。成员归属是输入断言,不是推断的比对;不编造相似度、比对长度或得分。序列和注释标识均原样保留。

用法

代码
link_ggchord_clusters(
  feature_data,
  membership,
  pairs,
  paralogs = c("drop", "all"),
  segment_policy = c("error", "span"),
  max_links = 10000
)

参数

feature_data

注释数据框,含 feature_id、accver、start、end,可选 strand,应符合 as_ggchord_feature()。

membership

含 feature_id 和 cluster_id 的数据框;每个注释只能属于一个组,其余列保留在报告中。

pairs

以 qaccver 和 saccver 明确指定比较的数据框。

paralogs

同一组、同一序列有多个成员时,默认 "drop",或显式 "all"。

segment_policy

默认 "error" 拒绝重复注释 ID;"span" 显式使用已校验不连续注释的外边界。

生成行数的正整数上限,默认 10000;超限会在分配笛卡尔积前停止。

返回值

列表,含普通连接数据框 data 和 report。连接保留组/成员 ID、链、源注释/成员行及分段表。report$comparisons 为每个请求比较对及任一侧出现的组列出成员数、输出数、保留/省略原因;两侧均未出现的组省略。report$members 保留成员元数据及解析状态。成员表含未知注释 ID 时,report$valid 为 false。

详细说明

默认 paralogs = "drop" 只保留每侧恰好一个成员的比较;歧义一对多/多对多省略并报告。"all" 明确请求笛卡尔积,在展开前用 max_links 检查总量。保留比较对行顺序及 query/subject 角色,自比对和重复对(含反向重复)由调用者处理。注释 ID 通常对应一行;若多行有意描述同一个不连续注释,segment_policy = "span" 要求同序列、同链、区间不重叠。连接锚定外部基因组边界,真实片段保留在 qsegments、ssegments 列表列;这不是外显子逐碱基比对,也不移除中间序列。单行嵌套 segments 原样保留。未知成员 ID 会报告并省略;标识格式错误、分组冲突、歧义重复注释、不支持的跨原点区间及未知比较序列 ID 会明确报错。报告也列出未分组注释。负链反转端点,未知链保持递增坐标及 orientation_known = FALSE。

示例

代码
library(ggchord)
library(dplyr)
data(plasmid_example_pUC19)
data(plasmid_example_pETDuet_1)
homolog_source <- bind_rows(plasmid_example_pUC19, plasmid_example_pETDuet_1)
homolog_seq <- homolog_source |>
  select(accver, length)
cluster_features <- homolog_source |>
  find_common_features() |>
  filter(type == "CDS", anno == "AmpR") |>
  select(accver, start, end, strand, anno) |>
  arrange(match(accver, homolog_source$accver)) |>
  mutate(feature_id = paste(accver, start, end, sep = ":"))
# Membership is computed from exact strand-corrected CDS DNA equality, not gene names.
reverse_complement <- function(sequence) {
  bases <- strsplit(sequence, "")[[1]]
  chartr("ACGT", "TGCA", paste(rev(bases), collapse = ""))
}
coding_sequences <- cluster_features |>
  left_join(select(homolog_source, accver, sequence), by = "accver") |>
  rowwise() |>
  mutate(
    coding_dna = substr(sequence, start, end),
    coding_dna = if (strand == "-") reverse_complement(coding_dna) else coding_dna
  ) |>
  ungroup()
cds_dna <- pull(coding_sequences, coding_dna)
membership <- tibble(
  feature_id = cluster_features$feature_id,
  cluster_id = paste0("exact_CDS_", match(cds_dna, unique(cds_dna)))
)
homologs <- link_ggchord_clusters(cluster_features, membership,
  pairs = tibble(qaccver = homolog_seq$accver[1], saccver = homolog_seq$accver[2])
)
loci <- find_ggchord_loci(homolog_seq, cluster_features,
  targets = cluster_features$feature_id[cluster_features$anno == "AmpR"][1], upstream = 100, downstream = 100
)
gene_palette <- c("+" = "#56887C", "-" = "#B58169", "." = "#AAB9AE")
doc_theme <- theme_ggchord_publication(
  axis.text = element_text(size = 9), axis.text.check.overlap = TRUE
) +
  theme(legend.position = "bottom")
p_homologs <- ggchord(seq_data = homolog_seq) +
  geom_link_ribbon(data = homologs$data, fill = "#ADC5B9", alpha = .6) +
  geom_seq() +
  geom_gene(data = cluster_features) +
  geom_seq_label(size = 4) +
  coord_collinear() +
  scale_gene_fill_manual(values = gene_palette) +
  doc_theme