我正在尝试一些purrr
习惯用法 - 特别是通过一个 data.frame 循环(或应用,如果您愿意)函数并与另一个 data.frame 中的所有其他行进行比较的函数......并根据该比较函数过滤笛卡尔积..
> df1
chr start end
(fctr) (int) (int)
1 chr1 9069 9176
2 chr1 10460 11368
3 chr1 34633 35625
4 chr1 36791 37023
> df2
chr start2
(fctr) (dbl)
1 chr1 9169
2 chr1 10360
3 chr1 34633
所以一个简单的示例函数是:
> is.between <- function(x1, y1, y2){
ifelse(x1 >= y1 & x1 <= y2, TRUE, FALSE)
}
我正在寻找的结果(现在)应该是一个 2 x 4 data.framedf3
像
# desired result
chr start end start2
(fctr) (int) (int)
1 chr1 9069 9176 9169
2 chr1 34633 35625 34633
然后我天真地尝试purrr::cross_n
像这样使用该功能......
> cross_n(list(df2$start2, df1$start, df1$start), .filter = is.between)
当然这不起作用,它是通过 3 个输入列(48 个组合)的笛卡尔积进行搜索。我希望搜索df2$start2
vs [df1$start
和df1$end
] 的组合(12 种组合)。
所以......有没有办法在purrr
框架内做到这一点?
不能完全理解cross_n
orcross2
和 errr .. 我不完全理解文档cross_d