Open
Description
I was just looking through the code and I noticed something changed that probably shouldn't have. Whenever we pass a data.table as an argument to a function, it is imperative to copy the data table to another data.table. So you might see something like:
foo <- function(dtName, ...) {
dT <- copy(dtName)
.
.
}
This addresses a weird R problem (and maybe there is a better work around, but this was the only way I could figure out) where the original data.table gets changed by the function call even if that was not the intention. For example:
library(data.table)
dd <- data.table(x = c(1, 2, 3), y = c(3, 4, 5))
dd
#> x y
#> 1: 1 3
#> 2: 2 4
#> 3: 3 5
# doesn't do what you think it does
chk <- function(d) {
d[, z := c(9, 10, 11)]
d[]
}
chk(dd)
#> x y z
#> 1: 1 3 9
#> 2: 2 4 10
#> 3: 3 5 11
dd
#> x y z
#> 1: 1 3 9
#> 2: 2 4 10
#> 3: 3 5 11
# this does
dd <- data.table(x = c(1, 2, 3), y = c(3, 4, 5))
dd
#> x y
#> 1: 1 3
#> 2: 2 4
#> 3: 3 5
chk2 <- function(d) {
d2 <- copy(d)
d2[, z := c(9, 10, 11)]
d2[]
}
chk2(dd)
#> x y z
#> 1: 1 3 9
#> 2: 2 4 10
#> 3: 3 5 11
dd
#> x y
#> 1: 1 3
#> 2: 2 4
#> 3: 3 5
Originally posted by @kgoldfeld in #49 (comment)
Metadata
Metadata
Assignees
Labels
No labels