| Top Page | プログラミング | R 自動化 目次 | 第3章へ |

R でプログラミング:データの一括処理とグラフ描き

テキストデータのファイル出力に関係する関数の例

ファイルにデータを書き込むにはいくつかの方法があります. そのために使える関数をいくつか紹介します. まずは出力に直接関係する関数を6つ.

関数 説明 使用例
cat
  • 入力画面にもファイルにも出力できる.
  • 出力対象はいくつも , で区切って並べられる
  • 出力対象は文字列.
  • 文字列以外のオブジェクトを渡すと,可能なかぎり文字列に自動変換.
  • 最後に改行コードがつかない
  • 文字列に,二重引用符 "" はつかない
x <- mean(d$width)

# 書きたいものを並べる.
# 最後に改行コード \n も出力させる.
cat("mean = ", x, "\n")  # 画面に出力

# ファイル result.txt に出力.
# すでにファイルがあるなら末尾に追加.
cat("mean = ", x, "\n", file = "result.txt, append = TRUE)
write
  • ファイルに出力.
  • 出力対象はひとつのみ
  • ふつうは行列の出力に使う
  • 最後に改行コードを出力
  • 文字列は二重引用符 "で囲まれる
x <- mean(d$width)

# result.txt に出力.
# すでにあるなら,末尾に追加.
write (x, file = "result.txt", append = TRUE)
write.table
  • ファイルに出力.
  • 行列やデータフレームの出力に使う
  • 最後に改行コードを出力
  • データ間の区切りは sep で指定(デフォルトだと空白)
d <- read.table('len_width.txt', header = TRUE) 
d$wwl <- d$width ^ 2 * d$len # width の二乗 x length

# 新しく加わった列も含めて出力
# 因子を引用符で囲わない(quote = FALSE)
# 行の名前(番号)を出力しない(row.names = FALSE)

write.table (d, file = "len_width2.txt", sep = "\t",
             quote = FALSE, row.names = FALSE)
writeLines
  • 出力先は file()で作成した connectionを指定.
  • 出力対象は文字列のベクトル
  • 文字列ごとに改行コードを付加(変更可能)
  • 作業後, connection を close() で閉じる.
x <- mean(d$width)

# result.txt への connection を作成(付加モード)
out.file <- file("result.txt", open = "a")

x_str <- sprintf("width\t%.2f", x)
writeLines(x_str, out.file)
close(out.file)
print
  • 入力画面への出力用.
  • 出力対象はひとつのみ
  • オブジェクトを渡すと,その内容を適当に出力.
  • 最後に改行コードを出力
  • 文字列は二重引用符 "で囲まれる (quote = FALSE を指定すれば引用符なし)
  • ベクトルの要素番号も自動的に出力
  • sink ()と組み合わせれば,ファイル出力にも使える.
x <- mean(d$width)
print (x)    # 入力画面へ出力.

# ファイル result.txt を出力先に.
sink('result.txt', append = TRUE)
print (x)    #  ファイル result.txt へ出力
sink()       #  出力先を入力画面へ戻す
sink
  • ふつうは画面に出力される内容が,指定ファイルに書き込まれるように設定する
  • 引数なしで呼び出せば,その前の sink 設定が取り消される.
# 使用例は上の print の例を参照.

print は,渡したオブジェクトの種類に応じて適当な形式で出力してくれます. 実は,print という関数には実体がありません.実際には, オブジェクトの種類に応じて用意されている 100 個以上の関数 のどれかが 呼び出されます.

続いて文字列作りに関係する関数を2つ.出力する内容を作るときに利用できます.

関数 説明 使用例
sprintf
  • 変数などの内容を指定の書式で表現した文字列を作る.
  • 最初の引数が書式指定,2つめ以降の引数が書き出したいデータ
# mean = の部分は特別の意味がないのでそのまま文字列に
# %.3f は,小数点以下3ケタの実数

x <- sprintf("mean = %.3f\n", mean(d$width))
cat(x)
参考: Perl 解説ページの printfの書式の説明
paste
  • 文字列を連結する
  • 数値データは文字列に自動変換.
  • なにも指定しないと空白一文字をはさんで連結
  • 空白なしでつなげることもできる.
x <- paste("mean = ", mean(d$width))
cat(x)



| Top Page | プログラミング | R 自動化 目次 | 第3章へ |