В R data.table вредит ли цепочка с трубами magrittr производительности? - PullRequest
0 голосов
/ 26 февраля 2020

Иногда мне нравится (или приходится) делать цепочки при работе с таблицей данных.

library(data.table)

DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)

DT[, .(y, z = v * y)][, lapply(.SD, sum)]

Однако я также могу написать последнюю строку, используя конвейер, что может быть полезным иногда (в отношении читабельности / структурирования кода):

DT[, .(y, z = v * y)] %>% 
  .[, lapply(.SD, sum)]

Является ли подход цепочки с использованием каналов эквивалентным построению цепочек без каналов в отношении производительности (скорости, использования памяти)?

РЕДАКТИРОВАТЬ: я в курсе в некоторых ситуациях связывание с использованием труб может быть медленнее, чем без труб. Но мой вопрос заключается в том, что если DT[...] %>% .[...] вместо DT[...][...] является таким примером (поскольку это может быть случай, когда в DT[...][...] есть некоторая внутренняя «невидимая» оптимизация, которая будет нарушена в DT[...] %>% .[...]).

EDIT2: Также я знаю, что использование канала всегда приводит к небольшим издержкам, которые могут иметь значение, если выполняется очень большое количество таких операций. Но меня интересует вопрос, который я попытался уточнить в вышеупомянутом редактировании с точки зрения алгоритма c (а именно, из-за возможности применения эффективной внутренней оптимизации из-за использования%>%).

...