przypisywanie przez odniesienie do załadowanych zestawów danych pakietu
Jestem w trakcie tworzenia pakietu, który używadata.table
jako zestaw danych i ma kilka funkcji, które przypisują za pomocą odniesienia:=
.
Zbudowałem prosty pakiet, aby zademonstrować mójproblem
library(devtools)
install_github('foo','mnel')
Zawiera dwie funkcje
foo <- function(x){
x[, a := 1]
}
fooCall <- function(x){
eval(substitute(x[, a :=1]),parent.frame(1))
}
i zestaw danych (nie załadowany leniwie)DT
, stworzony przy użyciu
DT <- data.table(b = 1:5)
save(DT, file = 'data/DT.rda')
Kiedy instaluję ten pakiet, rozumiem tofoo(DT)
należy przypisać przez odniesienie wewnątrzDT
.
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
Jeśli korzystam z więcejcorrect
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)
Jeśli używameval
isubstitute
w ramach funkcji
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
Powinienem się trzymać
DT <- foo(DT)
alboeval
/substitute
trasa, lubCzy jest coś, czego nie rozumiem w jaki sposóbdata
ładuje zestawy danych, nawet jeśli nie są leniwe?