运行dplyr :: left_join时,抑制注释"加入..."

Pet*_*eet 8 r knitr dplyr

这可能很简单,但我无法在任何地方找到答案......

当我使用以下代码时

library("nycflights13")
result <- flights %>% 
    dplyr::select(year:day, hour, origin, dest, tailnum, carrier) %>% 
    dplyr::left_join(airlines)
Run Code Online (Sandbox Code Playgroud)

以下评论在屏幕上回显:

> Joining by: "carrier"
Run Code Online (Sandbox Code Playgroud)

这在交互式会话中肯定是有用的信息,但是当我left_join作为较长脚本的一部分使用时,我通常不希望回应这种类型的注释(尤其是当脚本通过knitr生成html报告时,因为该html然后还将包含一条印刷Joining by: "carrier"线.

如何阻止left_join(等)打印此评论?

谢谢,彼得

mrb*_*uda 5

@Khashaaa的注释指示一种防止消息的方法,如果您事先知道绑定变量,该方法将非常有用且简洁。请参阅?dplyr::join有关如何使用一个或多个变量执行此操作。给定示例的语法为

left_join(airlines,by="carrier")
Run Code Online (Sandbox Code Playgroud)

因为dplyr代码使用R的message()函数来发出Joining by: *消息,所以可以suppressMessages()left_join(或任何其他dplyr联接)周围使用R的包装程序来禁止显示这些消息。请参阅?message以获取更多信息。实际上,OP示例返回两种消息,

>library("nycflights13")
>library("dplyr")
>result <- flights %>% 
+    select(year:day, hour, origin, dest, tailnum, carrier) %>% 
+    left_join(airlines)
Joining by: "carrier"
Warning message:
In left_join_impl(x, y, by$x, by$y) :
  joining factor and character vector, coercing into character vector
Run Code Online (Sandbox Code Playgroud)

可以使用suppressMessages()包装器禁止显示第一条消息

>suppressMessages(result <- flights %>% 
+    select(year:day, hour, origin, dest, tailnum, carrier) %>% 
+    left_join(airlines))
Warning message:
In left_join_impl(x, y, by$x, by$y) :
  joining factor and character vector, coercing into character vector
Run Code Online (Sandbox Code Playgroud)

第二条消息是诊断警告消息。有关?warning详细信息,请参见。有几种方法可以处理这种情况。如果您选择像上一条消息一样隐藏它,一种方法是添加另一个包装器,

> suppressWarnings(suppressMessages(result <- flights %>% 
+         select(year:day, hour, origin, dest, tailnum, carrier) %>% 
+         left_join(airlines)))
> 
Run Code Online (Sandbox Code Playgroud)