[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