在R/dplyr帮助文件中,有下面的代码,其中有within
和overlaps
,如何理解这两个关键词?谢谢!
library(dplyr)
segments <- tibble(
segment_id = 1:4,
chromosome = c("chr1", "chr2", "chr2", "chr1"),
start = c(140, 210, 380, 230),
end = c(150, 240, 415, 280)
)
reference <- tibble(
reference_id = 1:4,
chromosome = c("chr1", "chr1", "chr2", "chr2"),
start = c(100, 200, 300, 415),
end = c(150, 250, 399, 450)
)
样品1:within
by <- join_by(chromosome, within(x$start, x$end, y$start, y$end))
inner_join(segments, reference, by)
样本2:overlaps
by <- join_by(chromosome, overlaps(x$start, x$end, y$start, y$end))
full_join(segments, reference, by)
2条答案
按热度按时间8ljdwjyq1#
within
只在x的范围完全在y的范围内时捕获行。overlaps
如果x和y的范围之间存在任何类型的重叠,则捕获行。* * 但是**它不捕获完全在其中的行,即如果x_lower > y_lower & x_upper < y_upper
.这样可能更容易理解(注意这里使用了
overlap
的默认绑定:"[]"
)示例:
来自文档:
within(x_lower, x_upper, y_lower, y_upper)
对于[x_lower,x_upper]中的每个范围,这会找到该范围完全落在[y_lower,y_upper]内的任何地方。相当于x_lower>= y_lower,x_upper <= y_upper。
然后呢
overlaps(x_lower, x_upper, y_lower, y_upper, ..., bounds = "[]")
对于[x_lower,x_upper]中的每个范围,这会找到该范围在任何容量中与[y_lower,y_upper]重叠的任何地方。默认情况下相当于x_lower <= y_upper,x_upper>= y_lower。
vsmadaxz2#
join_by
的文档实际上涵盖了这两个辅助函数。对于
within
(我的粗体):对于[x_lower,x_upper]中的每个范围,这会找到该范围完全福尔斯在[y_lower,y_upper]内的任何地方。等价于x_lower >= y_lower,x_upper <= y_upper。
用于在()内构建的不等式是相同的,无论提供的范围的包容性如何。
因此,
join_by(within())
给出:对于
overlaps
(粗体):对于[x_lower,x_upper]中的每个范围,这会找到该范围在任何容量中与[y_lower,y_upper]重叠的任何地方。默认情况下相当于x_lower <= y_upper,x_upper >= y_lower。
边界可以是“[]”、“[)”、“(]”或“()”之一,以改变下限和上限的包含性。“[]”使用<=和>=,但其他3个选项使用< and >并生成完全相同的不等式。
因此,
join_by(overlaps())
给出: