From 73add71790e4a691b10f1fcfdbd10aa9752429b6 Mon Sep 17 00:00:00 2001 From: Michael Chirico Date: Sun, 29 Sep 2024 20:44:56 +0000 Subject: [PATCH] Run setalloccol before _any_ set* affects original table --- R/data.table.R | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/R/data.table.R b/R/data.table.R index c99701318..66fa75f50 100644 --- a/R/data.table.R +++ b/R/data.table.R @@ -2922,13 +2922,15 @@ setDT = function(x, keep.rownames=FALSE, key=NULL, check.names=FALSE) { break } } - rn = if (!identical(keep.rownames, FALSE)) rownames(x) else NULL - setattr(x, "row.names", .set_row_names(nrow(x))) - if (check.names) setattr(x, "names", make.names(names(x), unique=TRUE)) # setalloccol results in a shallow copy. Must be performed before class setting, # to have the class apply only to the new copy. #4784 setalloccol(x) + + rn = if (!identical(keep.rownames, FALSE)) rownames(x) else NULL + setattr(x, "row.names", .set_row_names(nrow(x))) + if (check.names) setattr(x, "names", make.names(names(x), unique=TRUE)) + # fix for #1078 and #1128, see .resetclass() for explanation. setattr(x, "class", .resetclass(x, 'data.frame'))