Rで、write.csvを使用していると、以下のエラーメッセージが出力されました。
こちらの原因についてご紹介します。
write.csv(tbl, file="csv/test_2.csv", row.names=FALSE, col.names = TRUE)
警告メッセージ:
write.csv(tbl, file = "csv/test_2.csv", row.names = FALSE, col.names = TRUE) で:
'col.names' への変更の試みは無視されました
write.csvについて
write.csvはテーブルをcsv形式でファイルに出力するコマンドになります。
例えば、以下の通り。
> tbl[1:3,1:3]
Quant Lower Upper
1 0.0 0.5000000 0.5000000
2 0.5 0.3085375 0.6914625
3 1.0 0.1586553 0.8413447
> write.csv(tbl[1:3,1:3], file="csv/test_2.csv", row.names=FALSE)
test_2.csvの中身は以下になります。
"Quant","Lower","Upper"
0,0.5,0.5
0.5,0.308537538725987,0.691462461274013
1,0.158655253931457,0.841344746068543
write.csvが失敗する原因について
実は、このようにcol.namesが無視されるのは仕様です。
ヘルプでwrite.csvを見てみると、以下の記述があります。
These wrappers are deliberately inflexible: they are designed to ensure that the correct conventions are used to write a valid file. Attempts to change append, col.names, sep, dec or qmethod are ignored, with a warning.
[Google 翻訳]
これらのラッパーは意図的に柔軟性がありません。正しい規則を使用して有効なファイルを書き込むように設計されています。 append、col.names、sep、dec、またはqmethodを変更しようとしても、警告付きで無視されます。
つまり、csvファイルとして一定の形式を守ったファイルを出力させるために、これらの機能を止めているのです。
対処法
主な方法としては以下の三つがあります。
- write.tableを使用する
- write.csvのソースコードを書き換える
- 手動やsedコマンドで直す
write.csvにこだわりが無い場合は、一つ目がおすすめです。
以下のように問題なく出力できます。
> write.table(tbl[1:3,1:3], file="csv/test_2.csv", row.names=FALSE, col.names=FALSE)
0 0.5 0.5
0.5 0.308537538725987 0.691462461274013
1 0.158655253931457 0.841344746068543
もし、write.csvを使用する必要がある場合は、単発なら3つ目のように手動orその他のwrite.csv出力後にその他のアプローチで修正しましょう。