назначение по ссылке в загруженные наборы данных пакета
Я нахожусь в процессе создания пакета, который использует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)
следует назначить по ссылке в пределах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
а такжеsubstitute
в функции
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)
илиeval
/substitute
маршрут илиЕсть ли что-то, что я не понимаю о том, какdata
загружает наборы данных, даже когда не ленится?