生成加载库的示例时正确使用 reprex 包
Properly using reprex package when generating examples that load libraries
我想在生成使用多个包的 answer/question1 时使用 reprex
包。假设我要提供以下答案
library("gdata")
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
mv(from = "dfA", to = paste0("df", "B"))
ls()
如果我将此代码直接传递给 reprex,输出将如下所示:
library("gdata")
#> gdata: read.xls support for 'XLS' (Excel 97-2004) files ENABLED.
#>
#> gdata: Unable to load perl libaries needed by read.xls()
#> gdata: to support 'XLSX' (Excel 2007+) files.
#>
#> gdata: Run the function 'installXLSXsupport()'
#> gdata: to automatically download and install the perl
#> gdata: libaries needed to support Excel XLS and XLSX formats.
#>
#> Attaching package: 'gdata'
#> The following object is masked from 'package:stats':
#>
#> nobs
#> The following object is masked from 'package:utils':
#>
#> object.size
#> The following object is masked from 'package:base':
#>
#> startsWith
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
#> [1] "dfA"
mv(from = "dfA", to = paste0("df", "B"))
ls()
#> [1] "dfB"
由 reprex package (v2.0.1)
于 2022-03-23 创建
丢失了与包加载相关的无关信息。另一种方法是抑制包启动消息:
suppressPackageStartupMessages(library("gdata"))
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
#> [1] "dfA"
mv(from = "dfA", to = paste0("df", "B"))
ls()
#> [1] "dfB"
由 reprex package (v2.0.1)
于 2022-03-23 创建
上面的 reprex 输出是通过以下方式生成的:
library("reprex")
reprex(x = {
suppressPackageStartupMessages(library("gdata"))
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
mv(from = "dfA", to = paste0("df", "B"))
ls()
}, venue = "so")
问题
有没有更简洁的方法来做到这一点? Reprex 提供 tidyverse_quiet
但我想知道是否有一种智能方法可以“扩展”该参数以应用于多个包?在加载多个包的假设答案中,我想避免多次编写 suppressPackageStartupMessages
只是为了抑制不必要的输出。
当从各种包中调用多个函数时,编写 package::function
可能很繁重。
1作为参考,我在贡献 to .
后开始思考
您不需要 运行 suppressPackageStartupMessages
多次。你可以做到
suppressPackageStartupMessages({
library(gdata)
library(tidyverse)
})
#> Warning: package 'tidyr' was built under R version 4.1.2
#> Warning: package 'dplyr' was built under R version 4.1.2
由 reprex package (v2.0.1)
于 2022-03-23 创建
您仍然会看到警告,但大多数垃圾信息都被抑制了。
对于 SO,您可以将其缩短为
suppressMessages({
library(gdata)
library(tidyverse)
})
我不会经常这样做,因为也许有些包裹有有用的信息。它也可能给新手错误的想法,让他们在自己的代码中使用它,而错过了那些信息。
如果你想要少一些压制,可以使用
library(gdata, quietly = TRUE)
library(tidyverse, quietly = TRUE)
要考虑的另一个选项是在 reprex 中使用 knitr 块选项。显然,这些将适用于块中的所有代码,尽管您可以使用多个块来进行更多控制。
reprex(x = {
#+ chunk1, message = FALSE
library("gdata")
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
mv(from = "dfA", to = paste0("df", "B"))
ls()
}, venue = "so")
给出:
library("gdata")
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
#> [1] "dfA"
mv(from = "dfA", to = paste0("df", "B"))
ls()
#> [1] "dfB"
由 reprex package (v2.0.1)
于 2022-03-23 创建
我想在生成使用多个包的 answer/question1 时使用 reprex
包。假设我要提供以下答案
library("gdata")
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
mv(from = "dfA", to = paste0("df", "B"))
ls()
如果我将此代码直接传递给 reprex,输出将如下所示:
library("gdata")
#> gdata: read.xls support for 'XLS' (Excel 97-2004) files ENABLED.
#>
#> gdata: Unable to load perl libaries needed by read.xls()
#> gdata: to support 'XLSX' (Excel 2007+) files.
#>
#> gdata: Run the function 'installXLSXsupport()'
#> gdata: to automatically download and install the perl
#> gdata: libaries needed to support Excel XLS and XLSX formats.
#>
#> Attaching package: 'gdata'
#> The following object is masked from 'package:stats':
#>
#> nobs
#> The following object is masked from 'package:utils':
#>
#> object.size
#> The following object is masked from 'package:base':
#>
#> startsWith
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
#> [1] "dfA"
mv(from = "dfA", to = paste0("df", "B"))
ls()
#> [1] "dfB"
由 reprex package (v2.0.1)
于 2022-03-23 创建丢失了与包加载相关的无关信息。另一种方法是抑制包启动消息:
suppressPackageStartupMessages(library("gdata"))
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
#> [1] "dfA"
mv(from = "dfA", to = paste0("df", "B"))
ls()
#> [1] "dfB"
由 reprex package (v2.0.1)
于 2022-03-23 创建上面的 reprex 输出是通过以下方式生成的:
library("reprex")
reprex(x = {
suppressPackageStartupMessages(library("gdata"))
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
mv(from = "dfA", to = paste0("df", "B"))
ls()
}, venue = "so")
问题
有没有更简洁的方法来做到这一点? Reprex 提供 tidyverse_quiet
但我想知道是否有一种智能方法可以“扩展”该参数以应用于多个包?在加载多个包的假设答案中,我想避免多次编写 suppressPackageStartupMessages
只是为了抑制不必要的输出。
当从各种包中调用多个函数时,编写 package::function
可能很繁重。
1作为参考,我在贡献
您不需要 运行 suppressPackageStartupMessages
多次。你可以做到
suppressPackageStartupMessages({
library(gdata)
library(tidyverse)
})
#> Warning: package 'tidyr' was built under R version 4.1.2
#> Warning: package 'dplyr' was built under R version 4.1.2
由 reprex package (v2.0.1)
于 2022-03-23 创建您仍然会看到警告,但大多数垃圾信息都被抑制了。
对于 SO,您可以将其缩短为
suppressMessages({
library(gdata)
library(tidyverse)
})
我不会经常这样做,因为也许有些包裹有有用的信息。它也可能给新手错误的想法,让他们在自己的代码中使用它,而错过了那些信息。
如果你想要少一些压制,可以使用
library(gdata, quietly = TRUE)
library(tidyverse, quietly = TRUE)
要考虑的另一个选项是在 reprex 中使用 knitr 块选项。显然,这些将适用于块中的所有代码,尽管您可以使用多个块来进行更多控制。
reprex(x = {
#+ chunk1, message = FALSE
library("gdata")
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
mv(from = "dfA", to = paste0("df", "B"))
ls()
}, venue = "so")
给出:
library("gdata")
dfA <- data.frame(colA = c(1, 2), colB = c(3, 4))
ls()
#> [1] "dfA"
mv(from = "dfA", to = paste0("df", "B"))
ls()
#> [1] "dfB"
由 reprex package (v2.0.1)
于 2022-03-23 创建