2013-01-15 11 views
5

Sto provando ad usare mapply per combinare due liste (A e B). Ogni elemento è un dataframe. sto cercando di rbind le dataframes in A ai corrispondenti dataframes in B. La seguente restituisce quello che vorrei in combo1:mapply e due liste

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]]) 
} 

Sto cercando di utilizzare mapply a fare lo stesso, ma posso 't farlo funzionare:

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

Speravo che qualcuno potrebbe aiutarmi

+0

L'uso di 'seq' nelle specifiche di A e B potrebbe essere anche problematico. Nel primo caso è superfluo e nel secondo sembra dare risultati fuorvianti. Per l'input vettoriale, viene usato 'seq_along'. – James

risposta

9

eri molto vicino!

## 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

C'è qualche ragione per citare il nome della funzione piuttosto che invocare direttamente la funzione? ad esempio 'mapply (rbind, A, B, SIMPLIFY = FALSE)' – Justin

+1

@Justin - Non che io sappia. (Funzionano entrambi, dal momento che il primo argomento viene elaborato da 'match.fun()'.) –

+1

Oppure 'Map (rbind, A, B)' – hadley