Mi dispiace se io non dovrei postare qualcosa qui che non è un risposta, ma il mio post è troppo lungo per un commento.
vorrei far notare che la soluzione di janosdivenyi di aggiungere un finale []
-dt
non sempre dare i risultati sperati (anche quando si utilizza data.table 1.9.6 o 1.10.4) come faccio io qui di seguito.
Gli esempi seguenti mostrano che se dt
è l'ultima riga nella funzione si ottiene il comportamento desiderato senza la presenza del trascinamento []
, ma se dt
non inizia l'ultima riga nella funzione poi un strascicando []
è necessario per ottenere il comportamento desiderato.
Il primo esempio mostra che senza trascinamento []
su dt
otteniamo il comportamento previsto quando dt
inizia nell'ultima riga della funzione
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
Aggiunta di un trascinamento []
su dt
dà comportamento imprevisto
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
Spostamento df <- 1
a dopo il dt senza interruzione []
restituisce unexpec Ted comportamento
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
Spostamento df <- 1
dopo il dt con un trailing []
dà l'atteso comportamento
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
Leggi questo: https://github.com/Rdatatable/data.table/blob/master /NEWS.md#bug-fixes-3. Il primo BUG che è stato corretto nella v 1.9.6 –
Vedere la sezione 2.23 delle FAQ di 'data.table' (' vignette ("datatable-faq", package = "data.table") ') – Uwe