你是不是也有這樣的需求:3個向量取交集。以前我都是這樣寫的:
v1 <- c("a", "b", "c")
v2 <- c("b", "c", "d")
v3 <- c("c", "d", "e")
intersect(intersect(v1, v2), v3)
貌似是能解決問題网杆,如果有300個向量呢?這個時候就要用到Reduce函數(shù)了。
用法:Reduce(f, x)
-
f
:代表所有執(zhí)行的操作函數(shù)博脑,例如:取交集函數(shù)intersect
,也可以自己指定復(fù)雜函數(shù) -
x
:一個列表票罐,每個元素代表操作函數(shù)的參數(shù)
例如:Reduce(f = intersect, x = list(v1, v2, v3))
叉趣,代表的意思是:
- 把
x
(即第二個參數(shù))的第一個元素(即v1
)和第二個元素(即v2
)作為參數(shù)傳給f
(即intersect
),結(jié)果記為v12
- 把
v12
和x
的第三個元素(即v3
)作為參數(shù)傳給f
该押,得到結(jié)果作為最終結(jié)果
如果x
的長度大于3疗杉,也是一樣的按照上述步驟執(zhí)行。下面的圖可能更容易理解:
所以蚕礼,其實Reduce(intersect, list(v1, v2, v3))
和intersect(intersect(v1, v2), v3)
是完全相同執(zhí)行邏輯烟具。
例2:將pred_list里面的每個元素按順序連接起來,用“=”隔開
以前我是這樣寫的:
paste0(pred_list[[1]],'=', pred_list[[2]],'=', pred_list[[3]],'=', pred_list[[4]],'=', pred_list[[5]])
改用Reduce函數(shù)可以寫成:
Reduce(f = function(x,y){paste0(x,'=',y)},x = pred_list)