在warning()中使用cat()致消息前置,如何正确生成警告信息?
在R中正确生成带多行内容的警告消息
你遇到的问题根源在于cat()函数的特性:它会直接将内容输出到控制台,而不是返回一个字符串。当你把cat()嵌套进warning()里时,cat()会先把内容打印出来,而warning()实际接收的是cat()的返回值NULL,所以最后只会显示空的Warning message:。
要让警告内容正确显示在Warning message:之后,你需要先把所有内容拼接成一个字符串,再传给warning(),推荐用这两种方法:
方法1:用paste()拼接字符串
acceptable_classes <- c( "character", "gg", "ggplot", "data.frame", "flextable" ) if(TRUE){ warning( paste( "Some result is not an acceptable class.", "Acceptable classes are:", paste(acceptable_classes, collapse = "\n"), # 把向量元素按换行拼接 sep = "\n" ) ) }
方法2:用sprintf()格式化消息
acceptable_classes <- c( "character", "gg", "ggplot", "data.frame", "flextable" ) if(TRUE){ msg <- sprintf( "Some result is not an acceptable class.\nAcceptable classes are:\n%s", paste(acceptable_classes, collapse = "\n") ) warning(msg) }
两种方法的输出都会是正确的顺序:
Warning message:
Some result is not an acceptable class.
Acceptable classes are:
character
gg
ggplot
data.frame
flextable
内容的提问来源于stack exchange,提问作者Jdub
相关产品推荐
相关产品推荐

