对不起,如果我不应该张贴在这里的东西,这不是一个 答案,但我的文章太长了评论。
我想指出,加入 (使用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