From cc88cb1a8c4a74f24d231906e7b44c16491cd9be Mon Sep 17 00:00:00 2001 From: joshhwuu Date: Thu, 29 Aug 2024 18:22:45 -0700 Subject: [PATCH 1/5] omit NA in indices --- R/print.data.table.R | 2 +- inst/tests/tests.Rraw | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/R/print.data.table.R b/R/print.data.table.R index 5281382794..2409dc710b 100644 --- a/R/print.data.table.R +++ b/R/print.data.table.R @@ -248,7 +248,7 @@ char.trunc = function(x, trunc.char = getOption("datatable.prettyprint.char")) { nchar_chars = nchar(x, 'char') is_full_width = nchar_width > nchar_chars idx = pmin(nchar_width, nchar_chars) > trunc.char - if (!any(idx)) return(x) # strtrim() errors for width=integer() on R 3.3.0 + if (!any(na.omit(idx))) return(x) # strtrim() errors for width=integer() on R 3.3.0 x[idx] = paste0(strtrim(x[idx], trunc.char * fifelse(is_full_width[idx], 2L, 1L)), "...") x } diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index 55712e0090..dfb85c91f9 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -18508,6 +18508,8 @@ local({ c(paste0(ja_ko, " ", paste0(ja_n, dots), " ", paste0(accented_a, dots)), paste0(c(ja_ko, ja_n, accented_a), dots, collapse=" "), paste0(c(ja_ko, ja_n, accented_a), dots, collapse=" "))) + # test for NA values, #6441 + test(2253.20, options=list(datatable.prettyprint.char = 1L), data.table(a = NA), output = " a\n1: NA") }) # allow 1-D matrix in j for consistency, #783 From 214d9be58b04ee1c058bb5fe04396740de7882b6 Mon Sep 17 00:00:00 2001 From: joshhwuu Date: Thu, 29 Aug 2024 18:33:59 -0700 Subject: [PATCH 2/5] revisit --- R/print.data.table.R | 4 ++-- inst/tests/tests.Rraw | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/R/print.data.table.R b/R/print.data.table.R index 2409dc710b..861031d21c 100644 --- a/R/print.data.table.R +++ b/R/print.data.table.R @@ -247,8 +247,8 @@ char.trunc = function(x, trunc.char = getOption("datatable.prettyprint.char")) { nchar_width = nchar(x, 'width') # Check whether string is full-width or half-width, #5096 nchar_chars = nchar(x, 'char') is_full_width = nchar_width > nchar_chars - idx = pmin(nchar_width, nchar_chars) > trunc.char - if (!any(na.omit(idx))) return(x) # strtrim() errors for width=integer() on R 3.3.0 + idx = pmin(nchar_width, nchar_chars) > trunc.char & !is.na(x) + if (!any(idx)) return(x) # strtrim() errors for width=integer() on R 3.3.0 x[idx] = paste0(strtrim(x[idx], trunc.char * fifelse(is_full_width[idx], 2L, 1L)), "...") x } diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index dfb85c91f9..84f82d967d 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -18508,7 +18508,7 @@ local({ c(paste0(ja_ko, " ", paste0(ja_n, dots), " ", paste0(accented_a, dots)), paste0(c(ja_ko, ja_n, accented_a), dots, collapse=" "), paste0(c(ja_ko, ja_n, accented_a), dots, collapse=" "))) - # test for NA values, #6441 + # test for data.table with NA, #6441 test(2253.20, options=list(datatable.prettyprint.char = 1L), data.table(a = NA), output = " a\n1: NA") }) From e03ddf931f862698f78b103e396210808da14547 Mon Sep 17 00:00:00 2001 From: joshhwuu Date: Thu, 29 Aug 2024 18:45:40 -0700 Subject: [PATCH 3/5] better test --- inst/tests/tests.Rraw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index 84f82d967d..bc06b45172 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -18509,7 +18509,7 @@ local({ paste0(c(ja_ko, ja_n, accented_a), dots, collapse=" "), paste0(c(ja_ko, ja_n, accented_a), dots, collapse=" "))) # test for data.table with NA, #6441 - test(2253.20, options=list(datatable.prettyprint.char = 1L), data.table(a = NA), output = " a\n1: NA") + test(2253.20, options=list(datatable.prettyprint.char = 1L), data.table(a = c("abc", NA)), output=" a\n1: a...\n2: ") }) # allow 1-D matrix in j for consistency, #783 From f16c5e5d6f12987eaaa02dcf83f9e30de1955f3c Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Fri, 30 Aug 2024 16:52:10 -0700 Subject: [PATCH 4/5] change order --- R/print.data.table.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/print.data.table.R b/R/print.data.table.R index 861031d21c..280582c5ee 100644 --- a/R/print.data.table.R +++ b/R/print.data.table.R @@ -247,7 +247,7 @@ char.trunc = function(x, trunc.char = getOption("datatable.prettyprint.char")) { nchar_width = nchar(x, 'width') # Check whether string is full-width or half-width, #5096 nchar_chars = nchar(x, 'char') is_full_width = nchar_width > nchar_chars - idx = pmin(nchar_width, nchar_chars) > trunc.char & !is.na(x) + idx = !is.na(x) & pmin(nchar_width, nchar_chars) > trunc.char if (!any(idx)) return(x) # strtrim() errors for width=integer() on R 3.3.0 x[idx] = paste0(strtrim(x[idx], trunc.char * fifelse(is_full_width[idx], 2L, 1L)), "...") x From dc6ab75de7dcee8f08c8cb246551834550a0bc21 Mon Sep 17 00:00:00 2001 From: joshhwuu Date: Fri, 30 Aug 2024 18:16:38 -0700 Subject: [PATCH 5/5] NEWS --- NEWS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS.md b/NEWS.md index 8b15449e82..7bc37a9741 100644 --- a/NEWS.md +++ b/NEWS.md @@ -6,6 +6,10 @@ 1. In `DT[, variable := value]`, when value is class `POSIXlt`, we automatically coerce it to class `POSIXct` instead, [#1724](https://github.com/Rdatatable/data.table/issues/1724). Thanks to @linzhp for the report, and Benjamin Schwendinger for the fix. +## BUG FIXES + +1. Using `print.data.table()` with character truncation using `datatable.prettyprint.char` no longer errors with `NA` entries, [#6441](https://github.com/Rdatatable/data.table/issues/6441). Thanks to @r2evans for the bug report, and @joshhwuu for the fix. + ## NOTES 1. Tests run again when some Suggests packages are missing, [#6411](https://github.com/Rdatatable/data.table/issues/6411). Thanks @aadler for the note and @MichaelChirico for the fix.