私はいくつかのpurrr
イディオムを試しています-特に、ループする(または必要に応じて適用する)関数は、1つの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)
}
私が(今のところ)探している結果は、次のdf3
ような2 x 4 の data.frame である必要があります
# 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