[R] Potential bug in readLines when reading empty lines

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Wed Jun 25 16:02:38 CEST 2025


On 2025-06-25 2:59 a.m., Heuvel, E.G. van den (Guido) via R-help wrote:
> Hi all,
> 
> I encountered some weird behaviour with readLines() recently, and I am wondering if this might be a bug, or, if it is not, how to resolve it. The issue is as follows:
> 
> If I have a text file where a line ends with just a carriage return (\r, CR) while the next line is empty and ends in a carriage return / linefeed (\r\n, CR LF), then the empty line is skipped when reading the file with readLines. The following code contains a test case:
> 
> ---
> print(R.version)
> # platform       x86_64-w64-mingw32
> # arch           x86_64
> # os             mingw32
> # crt            ucrt
> # system         x86_64, mingw32
> # status
> # major          4
> # minor          4.0
> # year           2024
> # month          04
> # day            24
> # svn rev        86474
> # language       R
> # version.string R version 4.4.0 (2024-04-24 ucrt)
> # nickname       Puppy Cup
> 
> txt_original <- paste0("Line 1\r", "\r\n", "Line 3\r\n")

Doesn't that produce the same thing as "Line 1\r\r\nLine 3\r\n" when you 
write it with writeBin?  If I read the ?readLines page correctly, that 
string contains 3 lines:

    Line 1 CR
    CR LF
    Line 3 CR LF

On the other hand, when I use your construction or mine, I get 4 lines 
read by my Mac:

  readLines("test.txt")
[1] "Line 1" ""       ""       "Line 3"

I'd guess it is processing it as


    Line 1 CR
    CR
    LF
    Line 3 CR LF

So I think there are definitely bugs or bad docs here.

Duncan Murdoch

> 
> # Write txt_original as binary to avoid unwanted conversion of end of line markers
> writeBin(charToRaw(txt_original), "test.txt")
> 
> txt_actual <- readLines("test.txt")
> print(txt_actual)
> # [1] "Line 1" "Line 3"
>   ---
> 
> I included the output of this script on my machine in the comments. I would expect txt_actual to be equal to c("Line 1", "", "Line 3"), but the empty line is skipped.
> 
> Is this a bug? And if not, how should I read test.txt in such a way that the empty 2nd line is left intact?
> 
> Best regards,
> 
> Guido van den Heuvel
> Statistics Netherlands
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list