R进阶 | R中的输出函数总结
输出函数
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说明有潜在的问题。
image.png
stop
stop会将任务终止,并把控制权交还给用户。输出前带着”Error“字样。
image.png
我们应该在写函数的时候就尽量避免致命错误发生,导致stop()被执行。高效的代码捕捉到错误后有进一步的处理。错误可以用
try()和tryCatch捕捉。
# Suppress the error message
good = try(1 + 1, silent = TRUE)
bad = try(1 + "1", silent = TRUE)
image.png
上面的
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