2016-08-17 71 views
1

我試圖使用R中的Reduce函數在多個數據框中使用merge函數。問題是,我想使用合併函數add=T,並且似乎沒有在高階Reduce函數中指定此函數。用R的額外參數減少R

所以我想:

a <- data.frame(id=c(1, 2, 3, 4), a=c('a', 'b', 'c', 'd')) 
b <- data.frame(id=c(1, 2, 5, 6), b=c('a', 'b', 'e', 'f')) 
c <- data.frame(id=c(3, 4, 5, 6), c=c('c', 'd', 'e', 'f')) 

out <- Reduce(merge, list(a, b, c), add=T) 

out 
    id a b c 
1 1 a a <NA> 
2 2 b b <NA> 
3 3 c <NA> c 
4 4 d <NA> d 
5 5 <NA> e e 
6 6 <NA> e e 

但由於merge默認爲add=F,就是我得到的是:

[1] id a b c 
<0 rows> (or 0-length row.names) 

回答

5

據我所知,Reduce不能處理額外的參數尚未傳遞給函數參數。但是您可以使用自定義參數重新定義merge函數,並將其作爲匿名函數傳遞給Reduce

Reduce(function(x, y) merge(x, y, by = "id", all = T), list(a, b, c)) 

# id a b c 
#1 1 a a <NA> 
#2 2 b b <NA> 
#3 3 c <NA> c 
#4 4 d <NA> d 
#5 5 <NA> e e 
#6 6 <NA> f f