Is it true that as.data.table() does a shallow copy?
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start with the as.data.table(dt) and copy(mtcars_big) calls in the supplied reprex, comparing the observed aliasing and timing with the package's behavior. Clarify whether the shallow-copy behavior is a supported contract and document the conclusion; done means users can tell whether they may rely on it.
Written by the indexing model from the issue text.
Description
It seems that as.data.table(dt) creates a "shallow" copy of its input? The reprex below suggests it does, but is this something that I can rely on?
library(data.table)
# Does it copy?
dt <- data.table(x = 1:3)
dt2 <- as.data.table(dt)
dt[, y := x + 1]
dt
#> x y
#> 1: 1 2
#> 2: 2 3
#> 3: 3 4
dt2
#> x
#> 1: 1
#> 2: 2
#> 3: 3
# Is it fast than copy?
mtcars_big <- data.table(mtcars[rep(1:32, each = 1e5), ])
bench::mark(
copy(mtcars_big),
as.data.table(mtcars_big),
check = FALSE
)[1:6]
#> Warning: Some expressions had a GC in every iteration; so filtering is
#> disabled.
#> # A tibble: 2 x 6
#> expression min mean median max `itr/sec`
#> <chr> <bch:tm> <bch:tm> <bch:tm> <bch:tm> <dbl>
#> 1 copy(mtcars_big) 274.9ms 283ms 283ms 291ms 3.53
#> 2 as.data.table(mtcars_big) 85.3ms 129ms 123ms 183ms 7.77
Created on 2019-06-26 by the reprex package (v0.2.1.9000)
- Dominant language
- R
- Stars
- 3.9k
- Forks
- 1.1k
- Avg merge
- 14h 4m
- Merged PRs (30d)
- 4
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Rdatatable/data.table
-
as.data.table() recurses without end on a survival::Surv object (or any data.frame carrying one) Open
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
Rdatatable/data.table#7887 ·
-
consistency tests
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Rdatatable/data.table#7853 · 3 comments ·
-
internals
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Rdatatable/data.table#6938 · 1 comment ·
-
encoding fread
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Rdatatable/data.table#5179 · 8 comments ·
-
documentation programming
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
Rdatatable/data.table#3199 · 3 comments ·
All issues in Rdatatable/data.table
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
r-lib/pkgdepends#485 · 3 comments ·
-
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
beginners blocker
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enviPathR OpenBuild Error Build OK Build Warning policies-accepted pre-review precheck-passed
Difficulty 1/5 Under an hour Newbie friendliness 84/100
Bioconductor/BiocContributions#207 · 6 comments ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
datacarpentry/semester-biology#1255 ·