2015-06-17 1 views
0

Я хочу foreach вернуть две матрицы в список каждой итерации. Это возвращаемое значение должно сочетаться с предыдущими итерациями путем передачи пользовательской функции acomb() в параметр .combine. Возвращенный список, содержащий матрицы, не следует просто комбинировать, чтобы сформировать более длинный список, используя .combine="list" или .combine="c". Вместо этого две матрицы должны быть уложены отдельно для создания двух трехмерных массивов.foreach: Как совместить две матрицы в списке на нескольких итерациях?

Следующий код работает, как ожидалось, если я выполнить две итерации (1:2), но я получаю сообщение об ошибке, если я увеличить число итераций:

require("foreach") 
require("abind") 

acomb <- function(old, new) list(abind(old$a, new$a, along=3), abind(old$b, new$b, along=3)) 

foreach(1:3, .combine=acomb, .multicombine=TRUE) %do% { 
    list(a=cbind(c(1,2),c(3,4)), b=cbind(c(1,2),c(3,4),c(5,6))) 
} 

Возвращенный ошибки:

Error in { : unused Argument (result.3) 
+0

извините, 'require (" foreach ")' отсутствовал. теперь код должен воспроизводить ошибку. – woobert

ответ

1

Ваша функция принимает только два аргумента. Таким образом, вы должны установить .multicombine = FALSE. Так как функция нуждается в применении с помощью подхода Reduce, вы должны указать элементы списка в возвращаемом значении.

acomb <- function(old, new) list(a = abind(old$a, new$a, along=3), 
           b = abind(old$b, new$b, along=3)) 

foreach(1:3, .combine=acomb) %do% { 
    list(a=cbind(c(1,2),c(3,4)), b=cbind(c(1,2),c(3,4),c(5,6))) 
} 
Смежные вопросы