R における警告やエラーメッセージなどを出力する方法

標準出力

オブジェクトの出力

オブジェクトの内容を出力するとき、print あるいは cat 関数を利用する。print はオブジェクトが保存されている状態で出力されるに対して、cat はオブジェクトをベクトル化してから出力する。

#二次元データ構造
x <- matrix(1:12, ncol = 6,  nrow = 2)

# print 省略形
x
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    3    5    7    9   11
## [2,]    2    4    6    8   10   12


# print
print(x)
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    3    5    7    9   11
## [2,]    2    4    6    8   10   12


#cat(自動改行しないために、改行コードを \n を付ける)
cat(x, "\n")
## 1 2 3 4 5 6 7 8 9 10 11 12


#リスト型
y <- list(ACC=c(0.909, 0.801), FDR=c(0.012, 0.022))

print(y)
## $ACC
## [1] 0.909 0.801
## 
## $FDR
## [1] 0.012 0.022


cat(y) #cat はリスト型をサポートしない
## Error in cat(list(...), file, sep, fill, labels, append) : 
##   argument 1 (type 'list') cannot be handled by 'cat'

警告文とエラー文

プログラムの進行状況やメタ情報を出力したいときは message 関数を利用する。警告文は warning 関数を利用する。また、エラー文は stop 関数を利用する。messagewarning を利用するとき、プログラムの進行を妨げない。一方、stop 関数はプログラムを中止させる。

#メッセージ
for (i in 1:3) {
  message(paste("Process", i, "is running..."))
}
## Process 1 is running...
## Process 2 is running...
## Process 3 is running...



#警告文
for (i in 1:3) {
 warning(paste("warn on step", i))
}
## Warning messages:
## 1: warn on step 1 
## 2: warn on step 2 
## 3: warn on step 3



#エラー文(for 文は 1 回で終了)
for (i in 1:3) {
 stop(paste("error on step", i))
}
## Error: error on step 1

標準出力の抑制方法

messagewarning 関数により出力される文は、suppressMessagessuppressWarnings 関数によって出力が抑制することができる。

#メッセージの抑制
for (i in 1:3) {
  suppressMessages(message(paste("Process", i, "is running...")))
  suppressMessages(print(i))
}
# message関数の内容は抑制されて、print関数の内容はそのまま表示
## [1] 1
## [1] 2
## [1] 3


# 警告文の抑制
for (i in 1:3) {
 suppressWarnings(warning(paste("suppressWarnings used", i)))
 suppressWarnings(print(i))
}
## [1] 1
## [1] 2
## [1] 3

printcat などの関数によって出力される内容を抑制するには capture.output 関数を利用する。

for (i in 1:3) {
  capture.output(cat(i))
}