Я ищу data.table способ потенциально устранить двойной цикл for.
Это мое предложение вместо цикла for и нумерованного списка:
s = lapply(split(tt, by="C", keep=FALSE), as.matrix)
f = sum
res = tt[, CJ(C1 = C, C2 = C, unique=TRUE)]
res[, v := f(s[[C1]], s[[C2]]), by=.(C1, C2)]
(я не могу установить ваш пакет и поэтому использую немного f
вместоDTW
. Я преобразую в матрицу, поскольку я предполагаю, что именно поэтому вы используете cbind
.)
Как правило, перечисление комбинаций и использование by=
- это способ избежать / переформулировать цикл с данными.Таблица.
Предварительный расчет подмножеств матриц s
может помочь с производительностью, но это по сути все еще цикл.Я сомневаюсь, что здесь можно сделать гораздо большую оптимизацию.