Возможно, дело вкуса, но вы могли бы использовать Map
и создать несколько списков для его подачи.
DT[, c("z1", "z2") := Map("*", list(x1, x2), list(y1, y2))]
Расширение до многих переменных в сочетании с mget
и ls
, do
DT[, c("z1", "z2") := Map("*", mget(ls(pattern="x")), mget(ls(pattern="y")))]
Оба они возвращают желаемый результат
DT
x1 y1 x2 y2 z1 z2
1: 1 6 11 16 6 176
2: 2 7 12 17 14 204
3: 3 8 13 18 24 234
4: 4 9 14 19 36 266
5: 5 10 15 20 50 300
Я просто упомяну, что mget
и ls
с шаблонами могут использоваться для возврата списков объектов, которые существуют вконкретная среда.ls
ищет родительскую среду по умолчанию, которая является средой таблицы данных, в которой она была вызвана.Поэтому в случае, если у вас есть объект с именем x3, который существует вне data.table, вам не нужно беспокоиться: этот объект игнорируется.