對不起,如果我不應該張貼在這裏的東西,這不是一個 答案,但我的文章太長了評論。
我想指出,加入 (使用data.table 1.9.6或1.10.4時甚至 )爲我做下面尾隨[]
到dt
並不總是產生預期的結果的那janosdivenyi的解決方案。
以下實施例顯示,如果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
移動df <- 1
到dt後沒有尾隨[]
給出了非爆炸泰德 行爲
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
的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 # 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。第1.9版中修復的第一個BUG。6 –
請參閱'data.table'常見問題的2.23節('vignette(「datatable-faq」,package =「data.table」)') – Uwe