From 330dee6f6a8def7901b6169572ba23afd2afbd4f Mon Sep 17 00:00:00 2001 From: arunsrinivasan Date: Thu, 17 Dec 2015 11:42:24 +0100 Subject: [PATCH] Better fix fread's check.names using make.names, #1027. --- R/fread.R | 3 ++- README.md | 2 ++ inst/tests/tests.Rraw | 9 +++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/R/fread.R b/R/fread.R index 2c801048bd..21f48f5dee 100644 --- a/R/fread.R +++ b/R/fread.R @@ -97,8 +97,9 @@ fread <- function(input="",sep="auto",sep2="auto",nrows=-1L,header="auto",na.str } else { setattr(ans, "class", "data.frame") } + # #1027, make.unique -> make.names as spotted by @DavidArenberg if (isTRUE(as.logical(check.names))) { - setattr(ans, 'names', make.unique(names(ans))) + setattr(ans, 'names', make.names(names(ans), unique=TRUE)) } as_factor <- function(x) { lev = forderv(x, retGrp = TRUE, na.last = NA) diff --git a/README.md b/README.md index 38c8f2eed3..f9c1bced30 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,8 @@ 6. `dim.data.table` is now implemented in C. Thanks to Andrey Riabushenko. + 7. Better fix to `fread`'s `check.names` argument using `make.names()`, [#1027](https://github.com/Rdatatable/data.table/issues/1027). Thanks to @DavidArenberg for spotting the issue with the previous fix using `make.unique()`. + ### Changes in v1.9.6 (on CRAN 19 Sep 2015) #### NEW FEATURES diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index d66f873943..9a78bcfce5 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -6490,11 +6490,12 @@ text = "x,y\n1,a\n2,a\n3,b\n4,b\n5,a\n" test(1527.3, dt[, y := factor(y)], fread(text, stringsAsFactors=TRUE)) # #1027, check.names argument to fread -nm1 = names(data.table(a=1:2, a=3:4)) +nm1 = names(fread("a,a\n1,2\n3,4", check.names=FALSE)) nm2 = names(fread("a,a\n1,2\n3,4", check.names=TRUE)) -nm3 = names(fread("a,a\n1,2\n3,4", check.names=FALSE)) -test(1528.1, make.unique(nm1), nm2) -test(1528.2, nm1, nm3) +nm3 = names(fread("a b,a b\n1,2\n3,4", check.names=TRUE)) +test(1528.1, c("a", "a"), nm1) +test(1528.2, c("a", "a.1"), nm2) +test(1528.3, c("a.b", "a.b.1"), nm3) # add tests for between x = sample(10, 20, TRUE)