Skip to content

fread(text = ..., yaml = TRUE) fails with "cannot open file" when input is a scalar character string with newlines #7896

Description

@Noskario

Summary

When reading CSV data containing YAML metadata using fread(text = ..., yaml = TRUE), the function fails if text is a single character string containing newline characters (\n).

Curiously, if the exact same content is passed as a multi-element character vector (e.g. from capture.output()), fread works as expected.

Minimal Reproducible Example (reprex)

library(data.table)

# 1. Generate YAML-annotated CSV lines
lines_vec <- capture.output(fwrite(head(iris, 2), yaml = TRUE))

# Case A: Multi-element character vector -> WORKS
res_vec <- fread(text = lines_vec, yaml = TRUE)
print(res_vec)

# Case B: Single character string with \n (typical for HTTP responses / file reads) -> FAILS
scalar_text <- paste0(lines_vec, collapse = "\n")

res_scalar <- fread(text = scalar_text, yaml = TRUE)

Output of Case B:

Called from: h(simpleError(msg, call))
Warning message:
In base::file(input, "r") : cannot open file '---
source: R[v4.5.3]::data.table[v1.18.6.1]::fwrite
creation_time_utc: 2026-09-02 14:50:31
schema:
  fields:
  - name: Sepal.Length
    type: numeric
  - name: Sepal.Width
    type: numeric
  - name: Petal.Length
    type: numeric
  - name: Petal.Width
    type: numeric
  - name: Species
    type: factor
header: yes
sep: ','
sep2:
- ''
- '|'
- ''
eol: |2+

na.strings: ''
dec: '.'
qmethod: double
logical01: no
---
Sepal.Length,Sepal.Width,Petal.Length,Petal.Width,Species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa': No such file or directory

Expected Behaviour

It should behave the same as with yaml = FALSE, for which no error occurs:

lines_vec <- capture.output(fwrite(head(iris, 2), yaml = FALSE))
res_vec <- fread(text = lines_vec, yaml = FALSE)
print(res_vec)
scalar_text <- paste0(lines_vec, collapse = "\n")
res_scalar <- fread(text = scalar_text, yaml = FALSE)
res_scalar

> sessionInfo()
R version 4.5.3 (2026-03-11 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 26200)

Matrix products: default
  LAPACK version 3.12.1

locale:
[1] LC_COLLATE=German_Germany.utf8  LC_CTYPE=German_Germany.utf8   
[3] LC_MONETARY=German_Germany.utf8 LC_NUMERIC=C                   
[5] LC_TIME=German_Germany.utf8    

time zone: Europe/Berlin
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods  
[7] base     

other attached packages:
[1] data.table_1.18.6.1

loaded via a namespace (and not attached):
[1] compiler_4.5.3 cli_3.6.6      tools_4.5.3    yaml_2.3.12

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions