2013-01-15 13 views
5

Próbuję użyć mapply, aby połączyć dwie listy (A i B). Każdy element jest ramką danych. Próbuję rbind z dataframes A do odpowiednich dataframes w B. następujących zwrotów, co chciałbym w combo1:mapply i dwie listy

num = 10 
A<-list() 
B<-list() 
for (j in 1:num){ 
    A[[j]] <- as.data.frame(matrix(seq(1:9),3,3)) 
    B[[j]] <- as.data.frame(matrix(seq(10:18),3,3)) 
} 

combo1<-list() 
for (i in 1:num){ 
    combo1[[i]] <-rbind(A[[i]], B[[i]]) 
} 

próbuję użyć mapply zrobić to samo, ale mogę „t zmusić go do pracy:

combo2<-list() 
combo2<-mapply("rbind", A, B) 

miałem nadzieję, ktoś może proszę mi pomóc

+0

Używanie 'seq' w specyfikacji A i B również może być problematyczne. W pierwszym przypadku jest zbędne, aw drugim wygląda na to, że da fałszywe wyniki. Do wprowadzania wektorowego używane jest 'seq_along'. – James

Odpowiedz

9

Byliście bardzo blisko!

## Make this a more _minimal_ reproducible example 
A <- A[1:2] 
B <- B[1:2] 

## Override default attempt to reduce results to a vector, matrix, or other array 
mapply("rbind", A, B, SIMPLIFY=FALSE) 
# [[1]] 
# V1 V2 V3 
# 1 1 4 7 
# 2 2 5 8 
# 3 3 6 9 
# 4 1 4 7 
# 5 2 5 8 
# 6 3 6 9 
# 
# [[2]] 
# V1 V2 V3 
# 1 1 4 7 
# 2 2 5 8 
# 3 3 6 9 
# 4 1 4 7 
# 5 2 5 8 
# 6 3 6 9 
+0

Czy istnieje jakiś powód, aby podawać nazwę funkcji, a nie tylko wywoływać funkcję bezpośrednio? tj. 'mapply (rbind, A, B, SIMPLIFY = FALSE)' – Justin

+1

@Justin - Nie o tym wiem. (Oboje działają, ponieważ ten pierwszy argument jest przetwarzany przez 'match.fun()'.) –

+1

Lub 'Mapa (rbind, A, B)' – hadley