私は 答えではないのですが、私のポストはコメントのために長すぎるここで何かを掲示することになっていないよ場合はごめんなさい。
私は以下のように行うdt
に[]
末尾 を追加するjanosdivenyiのソリューションは、常に期待される結果(でも data.table 1.9.6または1.10.4を使用して)与えないことを指摘したいと思います。次いで
dt
が最後の行である場合、関数に つ[]
末尾 の存在なしに、所望の動作を得ることを示し、以下の実施例が、dt
関数の最後の行にない場合 末尾[]
所望の挙動を得るために必要である。 dt
が機能dt
上[]
末尾予期しない動作を与える追加
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
df <- 1
dt[, z := y - x]
}
myfunction(mydt) # Nothing printed as expected
mydt # Content printed as desired
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
の最後の行にあるときに
最初の例ではありませんがdt
に[]
を末尾に、我々は 期待される動作を得ることを示して
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
df <- 1
dt[, z := y - x][]
}
myfunction(mydt) # Content printed unexpectedly
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
mydt # Content printed as desired
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
をdtの後に移動させて、末尾に[]
を指定すると、unexpecテッド 行動末尾[]
とDT後df <- 1
を移動
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
dt[, z := y - x]
df <- 1
}
myfunction(mydt) # Nothing printed as expected
mydt # Nothing printed unexpectedly
が期待 行動
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
dt[, z := y - x][]
df <- 1
}
myfunction(mydt) # Nothing printed as expected
mydt # Content printed as desired
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
に与え、これを読むhttps://github.com/Rdatatable/data.table/blob/master /NEWS.md#bug-fixes-3。 v1.9で修正された最初のBUG。6 –
'data.table' FAQ(' vignette( "datatable-faq"、package = "data.table") ')のセクション2.23を参照してください。 – Uwe