Zuweisung per Referenz in geladene Paketdatensätze
Ich bin dabei, ein Paket zu erstellen, das a verwendetdata.table
als Datensatz und hat ein paar Funktionen, die per Referenz vergeben werden:=
.
Ich habe ein einfaches Paket erstellt, um meineproblem
library(devtools)
install_github('foo','mnel')
Es enthält zwei Funktionen
foo <- function(x){
x[, a := 1]
}
fooCall <- function(x){
eval(substitute(x[, a :=1]),parent.frame(1))
}
und ein Datensatz (nicht faul geladen)DT
erstellt mit
DT <- data.table(b = 1:5)
save(DT, file = 'data/DT.rda')
Wenn ich dieses Paket installiere, habe ich folgendes Verständnisfoo(DT)
sollte durch Bezugnahme innerhalb zuweisenDT
.
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
Wenn ich das mehr benutzecorrect
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)
Wenn ich benutzeeval
undsubstitute
innerhalb der Funktion
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
Soll ich bei bleiben
DT <- foo(DT)
oder dereval
/substitute
route, oderGibt es etwas, was ich nicht verstehe?data
lädt Datensätze, auch wenn nicht faul?