输出函数
R中我们会用的比较多输出函数有以下五个:
print()
cat()
message()
warning()
stop()
其中前两个函数将结果输出到标准输出即stdout
。
后三个则将结果输出到标准错误输出即stderr
。
如何屏蔽输出
suppressWarnings()
, suppressMessages()
, suppressPackageStartupMessages()
等可以隐藏一些信息的输出。这在当你使用knitr
,rmarkdown
或Sweave
来创建动态文档的时候很有用。
比如,knitr
的chunk options
中有error = F
, message = F
, and warning = F
来分别隐藏相应的信息。而results = "hide"
将屏蔽所有输出。
print()
print()
出来的内容前面总是有一个[x]
。
print("Hello!")
#[1] "Hello!"
而合并输出需要使用paste()
或者paste0()
。前者在两个词间自动加空格。
print(paste("Hello","World!"))
[1] "Hello World!"
print(paste0("Hello","World!"))
[1] "HelloWorld!"
print(paste("Hello","World!", sep = ""))
[1] "HelloWorld!"
cat()
cat()
把print()
的一些问题都解决了。唯一的要注意的是,换行要用\n
或者fill = TRUE
。一般cat最好只用在print()/show()
methods
cat("Hello!\n")
Hello!
cat("Hello","World!\n")
Hello World!
cat("Hello","World!\n", sep = "")
HelloWorld!
message()
message()
的输出是醒目的红色。原因是它的输出被作为stderr
而不是stdout
。messge可用来给用户信息量较大的输出。
paste0
内置在函数中了。
message("Hello ","World!") # Note the space after Hello
"Hello World!"
messge()
提供一个错误状态,可以被tryCatch()
捕捉。
tryCatch(message("hello\n"), message=function(e){cat("goodbye\n")})
goodbye
warning
warning不要经常使用。输出的最上面会有一句红色的Warning message:
。warning说明有潜在的问题。
stop
stop会将任务终止,并把控制权交还给用户。输出前带着”Error“字样。
我们应该在写函数的时候就尽量避免致命错误发生,导致stop()被执行。高效的代码捕捉到错误后有进一步的处理。错误可以用
try()
和tryCatch
捕捉。
# Suppress the error message
good = try(1 + 1, silent = TRUE)
bad = try(1 + "1", silent = TRUE)
上面的
bad
对象是一个try-error类的字符串,它的condition属性包含错误信息。可以这样对错误信息进行处理
if(class(bad) == "try-error")
# Do something
进一步关于error handling或debugging的建议可以查看《advanced R》这本书。
参考
1.Why is message() a better choice than print() in R for writing a package?
2.communicating-with-the-user