Конструкция do.call(function(...) Map(list, ...), cars) в языке R - порядок обхода аргументов
Не будут ли уважаемые коллеги настолько любезны, чтоб пояснять, каков принцип обхода аргументов в конструкции do.call(function(...) Map(list, ...), cars) ? Почему в отличии от прямой конструкции Map(list, cars) результат будет отличаться порядком (грубо говоря произойдет "транспонирование" матрицы). (Речь о языке - "R").
cars <- list(list("white BMW", "black BMW","1_3"), list("white GMC", "black GMC","2_3"), list("3 white GMC", "3 black GMC","3 2_3") )
do.call(function(...) Map(list, ...), cars)
Выдаст ответ:
'white BMW' 'white GMC' '3 white GMC'
'black BMW' 'black GMC' '3 black GMC'
'1_3' '2_3' '3 2_3'
В отличии от Map(list, cars)
'white BMW' 'black BMW' '1_3'
'white GMC' 'black GMC' '2_3'
'3 white GMC' '3 black GMC' '3 2_3'
Пример ноутбука с кодами :
https://www.kaggle.com/alexandervc/r-do-call-map-with-3-dots
Ответы (1 шт):
Внутри do.call() происходит вычисление выражения Map(list, list("white BMW", "black BMW","1_3"), list("white GMC", "black GMC","2_3"), list("3 white GMC", "3 black GMC","3 2_3")).
Дело в том, что
args a list of arguments to the function call. The names attribute of args gives the argument names.
И вместо ... подставляется не один объект cars (список списков), а все вложенные списки по отдельности.