9
在我重新發現輪子之前:R中是否有函數接收列表x
並返回列表y
這樣y[[i]] = intersect(x[[1]][[i]], x[[2]][[i]], ...)
?如果沒有,是否有一種R-adic方法可以在幾行代碼中進行編碼?列表在R的交集
在我重新發現輪子之前:R中是否有函數接收列表x
並返回列表y
這樣y[[i]] = intersect(x[[1]][[i]], x[[2]][[i]], ...)
?如果沒有,是否有一種R-adic方法可以在幾行代碼中進行編碼?列表在R的交集
這是行不通的嗎?
x <- list(list(1:3,2:4),list(2:3,4:5),list(3:7,4:5))
maxlen <- max(sapply(x,length))
lapply(seq(maxlen),function(i) Reduce(intersect,lapply(x,"[[",i)))
(intersect
只需要兩個參數,所以你必須使用Reduce
作爲一個額外的步驟)
PS我沒有任何硬的情況下嘗試了這一點 - 例如長度不均勻的列表。
看來Reduce
簡直可以用如下:
> Reduce(intersect, list(v1 = c("a","b","c","d"),
+ v2 = c("a","b","e"),
+ v3 = c("a","f","g")))
[1] "a"
這是相當不錯的,並在R精神。 – gappy