備忘ログ

チラシの裏的備忘録&メモ

{readr}の`read_csv()`で思いがけない`Files must end with a newline`エラーでCSVファイルが読み込めない事案に遭遇したのでメモ

(2022/10/01追記)

Vroom 1.6.0で解決され、当該問題発生しないようになった様子。

(追記終了)

{readr}のread_csv()で思いがけないFiles must end with a newlineエラーでCSVファイルが読み込めない事案に遭遇したのでメモしておく。

現在、エラー自体は開発側もISSUEで把握している様子?({vroom}のISSUEにあった)だが、修正に至っていない様子。

github.com

github.com

自分の環境(Windows)でエラーが起こる条件

  • CSVファイルの最後のデータのあとに改行されていないデータ
  • このデータが、Downloadのディレクトリにあるか、ローカル環境とオンラインストレージで同期するディレクトリに存在する(Google DriveやOneDriveで確認)
  • これを{readr}のread_csv()で読み込もうとする

とエラーが起こる。

このエラーはcsvファイルを読み込むときに使われている{vroom}パッケージのvroom()でのエラーの様子。

このファイルとまったく同じものが完全なローカル環境(同期していないDocument下など)にある場合には問題なく読み込める。

暫定的な解決策としては、ISSUEにもあるように、読み込もうとしたファイルがtest.csvの場合なら

vroom(
  iconv(
    "test.csv",
    to = "UTF-8"
  )
)

などとiconv()を重ねるとうまくいくかもしれない。

あるいは、読み込みを組み込みのread.csv()関数を使うか、{data.table}fread()を使うとうまく読み込めるかもしれい。

あるいは、csvファイルをいじっても良いのなら、最後のデータのあとに改行を挿入すると解決するが……。