Asignación por referencia en conjuntos de datos de paquetes cargados

Estoy en el proceso de crear un paquete que usa undata.table como un conjunto de datos y tiene un par de funciones que se asignan por referencia utilizando:=.

He construido un paquete simple para demostrar miproblem

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

Contiene dos funciones

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

y un conjunto de datos (no cargado perezoso)DT, creado usando

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

Cuando instalo este paquete, mi entendimiento es quefoo(DT) debe asignar por referencia dentro deDT.

 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

Si uso mascorrect

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)

Si yo usoeval ysubstitute dentro de la función

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

Debería seguir con

DT <- foo(DT) o laeval/substitute ruta, o¿Hay algo que no entiendo sobre cómodata carga datasets, incluso cuando no es perezoso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta