Skip to content

Commit c0d7798

Browse files
authored
Merge branch 'master' into hindi_s
2 parents 32db0c4 + 4e9c989 commit c0d7798

25 files changed

+522
-511
lines changed

.gitattributes

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,16 @@
88
# want to preserve the line endings robustly
99
inst/tests/** -text
1010
inst/tests/*.Rraw text eol=lf linguist-language=R
11+
# Ensure GitHub linguist only considers source code files
12+
# for language statistics
13+
docs/** linguist-documentation
14+
man/** linguist-documentation
15+
tests/** linguist-vendored
16+
vignettes/** linguist-vendored
17+
po/** linguist-vendored
18+
.github/** linguist-vendored
19+
.ci/** linguist-vendored
20+
.dev/** linguist-vendored
21+
.devcontainer/** linguist-vendored
22+
.graphics/** linguist-vendored
23+
.Rproj.user/** linguist-vendored

.github/workflows/R-CMD-check-occasional.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ jobs:
4242

4343
env:
4444
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
45+
RUN_ALL_DATATABLE_TESTS: yes
4546

4647
steps:
4748
- name: Set locale

.gitlab-ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ variables:
1313
TZ: "UTC" ## to avoid 'Failed to create bus connection' from timedatectl via Sys.timezone() on Docker with R 3.4.
1414
## Setting TZ for all GLCI jobs to isolate them from timezone. We could have a new GLCI job to test under
1515
## a non-UTC timezone, although, that's what we do routinely in dev.
16+
RUN_ALL_DATATABLE_TESTS: "yes" ## run optional tests in CI
1617
R_REL_VERSION: "4.5" # only raise when RTOOLS for REL is available
1718
R_REL_WIN_BIN: "https://cloud.r-project.org/bin/windows/base/old/4.5.0/R-4.5.0-win.exe"
1819
R_DEV_VERSION: "4.6"

NEWS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,8 @@ See [#2611](https://github.com/Rdatatable/data.table/issues/2611) for details. T
348348

349349
24. Rolling functions now ensure there is no nested parallelism. It could have happened for vectorized input and `adaptive=TRUE`, [#7352](https://github.com/Rdatatable/data.table/issues/7352). Thanks @jangorecki for the fix.
350350

351+
25. By-group operations on missing rows (e.g. `foo[c(i, NA), bar, by=grp]`) now avoid leaving in data from the previous groups, [#7442](https://github.com/Rdatatable/data.table/issues/7442). Thanks @aitap for the report and the fix.
352+
351353
### NOTES
352354

353355
1. The following in-progress deprecations have proceeded:
@@ -373,6 +375,8 @@ See [#2611](https://github.com/Rdatatable/data.table/issues/2611) for details. T
373375
374376
7. In rare situations a data.table object may lose its internal attribute that holds a self-reference. New helper function `.selfref.ok()` tests just that. It is only intended for technical use cases. See manual for examples.
375377
378+
8. Retain important information in the error message about the source of the error when `i=` fails, e.g. pointing to `charToDate()` failing in `DT[date_col == "20250101"]`, [#7444](https://github.com/Rdatatable/data.table/issues/7444). Thanks @jan-swissre for the report and @MichaelChirico for the fix.
379+
376380
## data.table [v1.17.8](https://github.com/Rdatatable/data.table/milestone/41) (6 July 2025)
377381
378382
1. Internal functions used to signal errors are now marked as non-returning, silencing a compiler warning about potentially unchecked allocation failure. Thanks to Prof. Brian D. Ripley for the report and @aitap for the fix, [#7070](https://github.com/Rdatatable/data.table/pull/7070).

R/data.table.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ replace_dot_alias = function(e) {
111111
)
112112
idx = regexpr(missing_obj_regex, err_str, perl=TRUE)
113113
if (idx == -1L)
114-
stopf("%s", err_str, domain=NA) # Don't use stopf() directly, since err_str might have '%', #6588
114+
stop(err) # Pass 'err' to retain call site data (#7444); beware also #6588
115115
start = attr(idx, "capture.start", exact=TRUE)[ , "obj_name"]
116116
used = substr(
117117
err_str,

R/frollapply.R

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -297,38 +297,22 @@ frollapply = function(X, N, FUN, ..., by.column=TRUE, fill=NA, align=c("right","
297297
tight = function(i, dest, src, n) FUN(.Call(CmemcpyDT, dest, src, i, n), ...)
298298
}
299299
} else {
300-
#has.growable = base::getRversion() >= "3.4.0"
301-
## this is now always TRUE
302-
## we keep this branch, it may be useful when getting rid of SET_GROWABLE_BIT and SETLENGTH #6180
303-
has.growable = TRUE
304-
cpy = if (has.growable) function(x) .Call(Csetgrowable, copy(x)) else copy
300+
cpy = function(x) .Call(CcopyAsGrowable, x)
305301
ansMask = function(len, n) {
306302
mask = seq_len(len) >= n
307303
mask[is.na(mask)] = FALSE ## test 6010.206
308304
mask
309305
}
310306
if (by.column) {
311-
allocWindow = function(x, n) x[seq_len(max(n, na.rm=TRUE))]
312-
if (has.growable) {
313-
tight = function(i, dest, src, n) FUN(.Call(CmemcpyVectoradaptive, dest, src, i, n), ...) # CmemcpyVectoradaptive handles k[i]==0
314-
} else {
315-
tight = function(i, dest, src, n) {stopf("internal error: has.growable should be TRUE, implement support for n==0"); FUN(src[(i-n[i]+1L):i], ...)} # nocov
316-
}
307+
allocWindow = function(x, n) cpy(x[seq_len(max(n, na.rm=TRUE))])
308+
tight = function(i, dest, src, n) FUN(.Call(CmemcpyVectoradaptive, dest, src, i, n), ...) # CmemcpyVectoradaptive handles k[i]==0
317309
} else {
318310
if (!list.df) {
319-
allocWindow = function(x, n) x[seq_len(max(n, na.rm=TRUE)), , drop=FALSE]
320-
} else {
321-
allocWindow = function(x, n) lapply(x, `[`, seq_len(max(n)))
322-
}
323-
if (has.growable) {
324-
tight = function(i, dest, src, n) FUN(.Call(CmemcpyDTadaptive, dest, src, i, n), ...) # CmemcpyDTadaptive handles k[i]==0
311+
allocWindow = function(x, n) cpy(x[seq_len(max(n, na.rm=TRUE)), , drop=FALSE])
325312
} else {
326-
if (!list.df) { # nocov
327-
tight = function(i, dest, src, n) {stopf("internal error: has.growable should be TRUE, implement support for n==0"); FUN(src[(i-n[i]+1L):i, , drop=FALSE], ...)} # nocov
328-
} else {
329-
tight = function(i, dest, src, n) {stopf("internal error: has.growable should be TRUE, implement support for n==0"); FUN(lapply(src, `[`, (i-n[i]+1L):i), ...)} # nocov
330-
}
313+
allocWindow = function(x, n) cpy(lapply(x, `[`, seq_len(max(n))))
331314
}
315+
tight = function(i, dest, src, n) FUN(.Call(CmemcpyDTadaptive, dest, src, i, n), ...) # CmemcpyDTadaptive handles k[i]==0
332316
}
333317
}
334318
## prepare templates for errors and warnings

R/test.data.table.R

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
test.data.table = function(script="tests.Rraw", verbose=FALSE, pkg=".", silent=FALSE, showProgress=interactive()&&!silent, testPattern=NULL,
2-
memtest=Sys.getenv("TEST_DATA_TABLE_MEMTEST", 0L), memtest.id=NULL) {
3-
stopifnot(isTRUEorFALSE(verbose), isTRUEorFALSE(silent), isTRUEorFALSE(showProgress))
2+
memtest=Sys.getenv("TEST_DATA_TABLE_MEMTEST", 0L), memtest.id=NULL, optional=FALSE) {
3+
stopifnot(isTRUEorFALSE(verbose), isTRUEorFALSE(silent), isTRUEorFALSE(showProgress), isTRUEorFALSE(optional))
4+
5+
# Skip optional tests unless RUN_ALL_DATATABLE_TESTS is set
6+
if (optional && Sys.getenv("RUN_ALL_DATATABLE_TESTS") != "yes") {
7+
return(invisible(TRUE))
8+
}
9+
410
memtest = as.integer(memtest)
511
stopifnot(length(memtest)==1L, memtest %in% 0:2)
612
memtest.id = as.integer(memtest.id)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
[![CRAN usage](https://jangorecki.gitlab.io/rdeps/data.table/CRAN_usage.svg?sanitize=true)](https://gitlab.com/jangorecki/rdeps)
1111
[![BioC usage](https://jangorecki.gitlab.io/rdeps/data.table/BioC_usage.svg?sanitize=true)](https://gitlab.com/jangorecki/rdeps)
1212
[![indirect usage](https://jangorecki.gitlab.io/rdeps/data.table/indirect_usage.svg?sanitize=true)](https://gitlab.com/jangorecki/rdeps)
13-
[![Powered by NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A )](http://numfocus.org)
13+
[![Powered by NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A )](https://numfocus.org)
1414
<!-- badges: end -->
1515

1616
`data.table` provides a high-performance version of [base R](https://www.r-project.org/about.html)'s `data.frame` with syntax and feature enhancements for ease of use, convenience and programming speed.
@@ -108,7 +108,7 @@ A list of packages that significantly support, extend, or make use of `data.tabl
108108

109109
- click the **Watch** button at the top and right of GitHub project page
110110
- read [NEWS file](https://github.com/Rdatatable/data.table/blob/master/NEWS.md)
111-
- follow [#rdatatable](https://twitter.com/hashtag/rdatatable) and the [r_data_table](https://x.com/r_data_table) account on X/Twitter
111+
- follow [#rdatatable](https://x.com/hashtag/rdatatable) and the [r_data_table](https://x.com/r_data_table) account on X/Twitter
112112
- follow [#rdatatable](https://fosstodon.org/tags/rdatatable) and the [r_data_table account](https://fosstodon.org/@r_data_table) on fosstodon
113113
- follow the [data.table community page](https://www.linkedin.com/company/data-table-community) on LinkedIn
114114
- watch recent [Presentations](https://github.com/Rdatatable/data.table/wiki/Presentations)

0 commit comments

Comments
 (0)