назначение по ссылке в загруженные наборы данных пакета

Я нахожусь в процессе создания пакета, который используетdata.table в качестве набора данных и имеет несколько функций, которые назначаются по ссылке, используя:=.

Я построил простой пакет, чтобы продемонстрировать мойproblem

 library(devtools)
 install_github('foo','mnel')

Содержит две функции

foo <- function(x){
  x[, a := 1]
}
fooCall <- function(x){
  eval(substitute(x[, a :=1]),parent.frame(1))
} 

и набор данных (не ленивый загружен)DT, созданный с использованием

DT <- data.table(b = 1:5)
save(DT, file = 'data/DT.rda')

Когда я устанавливаю этот пакет, я понимаю, чтоfoo(DT)&nbsp;следует назначить по ссылке в пределахDT.

 library(foo)
 data(DT)
 foo(DT)
   b a
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1

# However this has not assigned by reference within `DT`

DT
   b
1: 1
2: 2
3: 3
4: 4
5: 5

Если я использую большеcorrect

tracmem(DT)
DT <- foo(DT)
# This works without copying
DT 
 b a
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1
untracemem(DT)

Если я используюeval&nbsp;а такжеsubstitute&nbsp;в функции

fooCall(DT)
   b a
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1
# it does assign by reference 
DT
   b a
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1

Должен ли я придерживаться

DT <- foo(DT)&nbsp;илиeval/substitute&nbsp;маршрут илиЕсть ли что-то, что я не понимаю о том, какdata&nbsp;загружает наборы данных, даже когда не ленится?