Stephen, 

I am sure one can find a lot of small issues and inconsistencies with R and 
it’s standard library. It has to support a lot of legacy cruft and the design 
process — especially in the early days — focused on getting things done rather 
than delivering a standard library of immaculate quality. And it is way too 
late to make dramatic changes lest you want to risk breaking existing software. 
That ship has sailed decades ago. 

Personally, I have taught myself a while ago to always use explicit 
configuration when using built-in functions, and in the last couple of years I 
have completely replaced them in favor of other packages (such as readr) that 
come with (arguably) more sane defaults and better diagnostics. 

Best, 

Taras


> On 30 Jun 2021, at 23:15, Stephen Ellison <s.elli...@lgcgroup.com> wrote:
> 
> Apologies if this is a well-worn question; I haven’t found it so far but 
> there's a lot of r-dev and I may have missed it in the archives. In the mean 
> time:
> 
> I've managed to avoid writing csv files with R for a couple of decades but 
> we're swopping data with a collaborator and I've tripped over an 
> inconsistency between read.csv and write.csv that seems less than helpful.
> The default line number behaviour for read.csv is to assume that, when the 
> number of items in the first row is one less than the number in the second, 
> that the first column contains row names. write.csv, however, includes an 
> empty string ("") as the first header entry over row names when writing. On 
> rereading, the original row names are then treated as data with unknown name, 
> replaced by "X".
> 
> That means that, unlike read.table and write.table,  something written with 
> write.csv is not read back correctly by read.csv .
> 
> Is that intentional?
> And whether it is intentional or not, is it wise?
> 
> Example:
> 
> ( D1 <- data.frame(A=letters[1:5], N=1:5, Y=rnorm(5) ) )
> write.csv(D1, "temp.csv")
> 
> ( D1w <- read.csv("temp.csv") )
> 
> # Note the unnecessary new X column ...
> #Tidy up
> unlink("temp.csv")
> 
> This differs from the parent .table defaults; write.table doesn’t add the 
> extra "" column label, so the object read back with read.table does not 
> contain an unwanted extra column.
> 
> Wouldn’t it be more sensible if write.csv() and read.csv() were consistent in 
> the same sense as read.table and write.table?
> Or at least if there were a switch (as.read.csv=TRUE ?) to tell write.csv to 
> omit the initial "", or vice versa?
> 
> Currently using R version 4.1.0 on Windows, but this reproduces at least as 
> far back as 3.6 
> 
> Steve E
> 
> 
> *******************************************************************
> This email and any attachments are confidential. Any u...{{dropped:13}}

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to