You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: NEWS.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -597,6 +597,8 @@
597
597
598
598
14. The options `datatable.print.class` and `datatable.print.keys` are now `TRUE` by default. They have been available since v1.9.8 (Nov 2016) and v1.11.0 (May 2018) respectively.
599
599
600
+
15. Thanks to @ssh352, Václav Tlapák, Cole Miller, András Svraka and Toby Dylan Hocking for reporting and bisecting a significant performance regression in dev. This was fixed before release thanks to a PR by Jan Gorecki, [#5463](https://github.com/Rdatatable/data.table/pull/5463).
@@ -730,15 +734,15 @@ const char *memrecycle(const SEXP target, const SEXP where, const int start, con
730
734
for (inti=0; i<slen; ++i) {
731
735
constintval=sd[i+soff];
732
736
if ((val<1&&val!=NA_INTEGER) ||val>nlevel) {
733
-
error(_("Assigning factor numbers to %s. But %d is outside the level range [1,%d]"), targetDesc, val, nlevel);
737
+
error(_("Assigning factor numbers to %s. But %d is outside the level range [1,%d]"), targetDesc(colnum, colname), val, nlevel);
734
738
}
735
739
}
736
740
} else {
737
741
constdouble*sd=REAL(source);
738
742
for (inti=0; i<slen; ++i) {
739
743
constdoubleval=sd[i+soff];
740
744
if (!ISNAN(val) && (!R_FINITE(val) ||val!=(int)val|| (int)val<1|| (int)val>nlevel)) {
741
-
error(_("Assigning factor numbers to %s. But %f is outside the level range [1,%d], or is not a whole number."), targetDesc, val, nlevel);
745
+
error(_("Assigning factor numbers to %s. But %f is outside the level range [1,%d], or is not a whole number."), targetDesc(colnum, colname), val, nlevel);
742
746
}
743
747
}
744
748
}
@@ -830,47 +834,47 @@ const char *memrecycle(const SEXP target, const SEXP where, const int start, con
warning(_("Coercing 'character' RHS to '%s' to match the type of %s."), targetIsI64?"integer64":type2char(TYPEOF(target)), targetDesc);
837
+
warning(_("Coercing 'character' RHS to '%s' to match the type of %s."), targetIsI64?"integer64":type2char(TYPEOF(target)), targetDesc(colnum, colname));
834
838
// this "Coercing ..." warning first to give context in case coerceVector warns 'NAs introduced by coercion'
835
839
// and also because 'character' to integer/double coercion is often a user mistake (e.g. wrong target column, or wrong
836
840
// variable on RHS) which they are more likely to appreciate than find inconvenient
#defineCOERCE_ERROR(targetType) error(_("type '%s' cannot be coerced to '%s'"), type2char(TYPEOF(source)), targetType); // 'targetType' for integer64 vs double
956
+
#defineCOERCE_ERROR(targetType) error(_("type '%s' cannot be coerced to '%s'"), type2char(TYPEOF(source)), targetType); // 'targetType' for integer64 vs double
953
957
954
958
constintoff=length(where) ? 0 : start; // off = target offset; e.g. called from rbindlist with where=R_NilValue and start!=0
955
959
constboolmc=length(where)==0&&slen>0&&slen==len&&soff==0; // mc=memcpy; only if types match and not for single items (a single assign faster than these non-const memcpy calls)
0 commit comments