From c7327036f662be38a83d37312f6d9139f037d51d Mon Sep 17 00:00:00 2001 From: manmita Date: Tue, 6 Jan 2026 03:08:55 +0530 Subject: [PATCH 1/3] feat(3611): added message and doc int64 column creation in fread --- R/fread.R | 16 +++++++++++++++- man/fread.Rd | 6 +++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/R/fread.R b/R/fread.R index 2f397b78e1..53300f7639 100644 --- a/R/fread.R +++ b/R/fread.R @@ -7,7 +7,8 @@ showProgress=getOption("datatable.showProgress",interactive()), data.table=getOp nThread=getDTthreads(verbose), logical01=getOption("datatable.logical01",FALSE), logicalYN=getOption("datatable.logicalYN", FALSE), keepLeadingZeros=getOption("datatable.keepLeadingZeros",FALSE), -yaml=FALSE, tmpdir=tempdir(), tz="UTC") +yaml=FALSE, tmpdir=tempdir(), tz="UTC", +no.integer64.message=getOption("datatable.integer64.message", FALSE)) { if (missing(input)+is.null(file)+is.null(text)+is.null(cmd) < 3L) stopf("Used more than one of the arguments input=, file=, text= and cmd=.") input_has_vars = length(all.vars(substitute(input)))>0L # see news for v1.11.6 @@ -261,6 +262,7 @@ yaml=FALSE, tmpdir=tempdir(), tz="UTC") if (identical(tt,"") || is_utc(tt)) # empty TZ env variable ("") means UTC in C library, unlike R; _unset_ TZ means local tz="UTC" } + ans = .Call(CfreadR,input,identical(input,file),sep,dec,quote,header,nrows,skip,na.strings,strip.white,blank.lines.skip,comment.char, fill,showProgress,nThread,verbose,warnings2errors,logical01,logicalYN,select,drop,colClasses,integer64,encoding,keepLeadingZeros,tz=="UTC") if (!length(ans)) return(null.data.table()) # test 1743.308 drops all columns @@ -268,6 +270,18 @@ yaml=FALSE, tmpdir=tempdir(), tz="UTC") require_bit64_if_needed(ans) setattr(ans,"row.names",.set_row_names(nr)) + # integer64 message on create - instead of warning + if (!isTRUE(no.integer64.message) && + identical(integer64, "integer64") && + any(vapply(ans, function(x) inherits(x, "integer64"), logical(1L)))) { + message( + "fread: Creating one or more integer64 columns. + See ?fread and ?bit64::integer64. + To suppress this message, use no.integer64.message=TRUE. + To avoid integer64 columns, use options(datatable.integer64='numeric')." + ) + } + if (isTRUE(data.table)) { setattr(ans, "class", c("data.table", "data.frame")) setalloccol(ans) diff --git a/man/fread.Rd b/man/fread.Rd index 40d2cfcc90..909513370b 100644 --- a/man/fread.Rd +++ b/man/fread.Rd @@ -25,7 +25,11 @@ nThread=getDTthreads(verbose), logical01=getOption("datatable.logical01", FALSE), logicalYN=getOption("datatable.logicalYN", FALSE), keepLeadingZeros = getOption("datatable.keepLeadingZeros", FALSE), -yaml=FALSE, tmpdir=tempdir(), tz="UTC" +yaml=FALSE, tmpdir=tempdir(), tz="UTC", +no.integer64.message=getOption("datatable.integer64.message", FALSE) + \item{no.integer64.message}{ Logical. If FALSE (default), fread will print a message when creating one or more integer64 columns, warning that this type is not fully supported in base R (e.g., as.matrix() will not work as expected). To suppress the message, set this argument to TRUE or use \code{options(datatable.integer64.message=TRUE)}. To avoid integer64 columns entirely, use \code{options(datatable.integer64='numeric')}. } +\bold{integer64 columns:} +If fread creates integer64 columns, it prints a message by default to inform the user. ) } \arguments{ From 6265e00d151cd6fa264dbf5e6334fa6c5d5365ec Mon Sep 17 00:00:00 2001 From: manmita Date: Tue, 6 Jan 2026 03:16:13 +0530 Subject: [PATCH 2/3] feat(3611): added to news and tests --- NEWS.md | 2 ++ inst/tests/tests.Rraw | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/NEWS.md b/NEWS.md index 23e8d5c873..c7f85ced85 100644 --- a/NEWS.md +++ b/NEWS.md @@ -24,6 +24,8 @@ 3. Vignettes are now built using `litedown` instead of `knitr`, [#6394](https://github.com/Rdatatable/data.table/issues/6394). Thanks @jangorecki for the suggestion and @ben-schwen and @aitap for the implementation. +4. `fread` now prints a message by default when creating one or more integer64 columns, warning that this type sometimes give unexpected results like in case of as.matrix(). The message can be suppressed with the new argument `no.integer64.message=TRUE`. To avoid integer64 columns, we can use options(datatable.integer64='numeric'). Thanks to @stefanfritsch, @mattdowle for the suggestion. [#3611](https://github.com/Rdatatable/data.table/issues/3611) + ### BUG FIXES 1. `fread()` with `skip=0` and `(header=TRUE|FALSE)` no longer skips the first row when it has fewer fields than subsequent rows, [#7463](https://github.com/Rdatatable/data.table/issues/7463). Thanks @emayerhofer for the report and @ben-schwen for the fix. diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index fcf78e9f36..4764f848d8 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -21978,3 +21978,12 @@ local({ test(2357.1, fread(f), DT) test(2357.2, fread(paste0("file://", f)), DT) }) +#3611 fread integer64 message +test(2358.1, + suppressMessages(fread("a\n1\n2\n", colClasses = "integer64")), + data.table(a = as.integer64(c(1,2))) +) +test(2358.2, + suppressMessages(fread("a\n1\n2\n", colClasses = "integer64", no.integer64.message = TRUE)), + data.table(a = as.integer64(c(1,2))) +) From 091c49f04f6ae130e5ad293046376571e38964b6 Mon Sep 17 00:00:00 2001 From: manmita Date: Tue, 6 Jan 2026 03:34:42 +0530 Subject: [PATCH 3/3] feat(3611): removed getoptions from no.integer64.message --- R/fread.R | 6 +++--- man/fread.Rd | 5 +---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/R/fread.R b/R/fread.R index 53300f7639..d89c784606 100644 --- a/R/fread.R +++ b/R/fread.R @@ -7,8 +7,8 @@ showProgress=getOption("datatable.showProgress",interactive()), data.table=getOp nThread=getDTthreads(verbose), logical01=getOption("datatable.logical01",FALSE), logicalYN=getOption("datatable.logicalYN", FALSE), keepLeadingZeros=getOption("datatable.keepLeadingZeros",FALSE), -yaml=FALSE, tmpdir=tempdir(), tz="UTC", -no.integer64.message=getOption("datatable.integer64.message", FALSE)) +yaml=FALSE, tmpdir=tempdir(), tz="UTC", no.integer64.message=FALSE +) { if (missing(input)+is.null(file)+is.null(text)+is.null(cmd) < 3L) stopf("Used more than one of the arguments input=, file=, text= and cmd=.") input_has_vars = length(all.vars(substitute(input)))>0L # see news for v1.11.6 @@ -273,7 +273,7 @@ no.integer64.message=getOption("datatable.integer64.message", FALSE)) # integer64 message on create - instead of warning if (!isTRUE(no.integer64.message) && identical(integer64, "integer64") && - any(vapply(ans, function(x) inherits(x, "integer64"), logical(1L)))) { + any(vapply(ans, inherits, logical(1L), what = "integer64"))) { message( "fread: Creating one or more integer64 columns. See ?fread and ?bit64::integer64. diff --git a/man/fread.Rd b/man/fread.Rd index 909513370b..c79331a3bc 100644 --- a/man/fread.Rd +++ b/man/fread.Rd @@ -26,10 +26,7 @@ logical01=getOption("datatable.logical01", FALSE), logicalYN=getOption("datatable.logicalYN", FALSE), keepLeadingZeros = getOption("datatable.keepLeadingZeros", FALSE), yaml=FALSE, tmpdir=tempdir(), tz="UTC", -no.integer64.message=getOption("datatable.integer64.message", FALSE) - \item{no.integer64.message}{ Logical. If FALSE (default), fread will print a message when creating one or more integer64 columns, warning that this type is not fully supported in base R (e.g., as.matrix() will not work as expected). To suppress the message, set this argument to TRUE or use \code{options(datatable.integer64.message=TRUE)}. To avoid integer64 columns entirely, use \code{options(datatable.integer64='numeric')}. } -\bold{integer64 columns:} -If fread creates integer64 columns, it prints a message by default to inform the user. +no.integer64.message=FALSE ) } \arguments{