data.table
をデータセットとして使用し、 を使用して参照によって割り当てる関数がいくつかあるパッケージを作成中です:=
。
私のデモンストレーションのために簡単なパッケージを作成しましたproblem
library(devtools)
install_github('foo','mnel')
2つの機能が含まれています
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
andを使用する場合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
怠け者でなくても、データセットをロードする方法について理解していないことがありますか?