2013-01-15 3 views
5

Я пытаюсь использовать mapply для объединения двух списков (A и B). Каждый элемент является фреймворком данных. Я пытаюсь rbind в dataframes в А к соответствующим dataframes в В. Следующие возвращает то, что я хотел бы в Combo1:mapply и два списка

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

Я пытаюсь использовать mapply сделать то же самое, но я не могу «т заставить его работать:

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

Я надеялся, что кто-то может помочь мне, пожалуйста,

+0

Использование «seq» в спецификации A и B может быть проблематичным. В первом случае это лишнее, а во втором кажется, что это даст неверные результаты. Для векторного ввода используется 'seq_along'. – James

ответ

9

Вы были очень близки!

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

Есть ли причина процитировать имя функции, а не просто вызвать функцию напрямую? то есть 'mapply (rbind, A, B, SIMPLIFY = FALSE)' – Justin

+1

@Justin - Не то, чтобы я знаю. (Они оба работают, поскольку этот первый аргумент обрабатывается 'match.fun()'.) –

+1

Или 'Map (rbind, A, B)' – hadley

Смежные вопросы