如何在 R 中使用 qwraps2 在新行中添加组比较结果
How to add results from group comparisons in new rows using qwraps2 in R
我正在关注 Peter DeWitt 在 qwraps2 和 summary_table 上的伟大 tutorial,但我无法继续前进。
到目前为止,这是我的数据和代码:
data(mtcars)
mtcars2 <- dplyr::mutate(mtcars,
cyl_factor = factor(cyl,
levels = c(6, 4, 8),
labels = paste(c(6, 4, 8), "cylinders")),
cyl_character = paste(cyl, "cylinders"),
gear_factor = factor(gear,
levels = c(3, 4, 5),
labels = paste(c(3, 4, 5), "gears")))
new_summary <- mtcars2 %>%
dplyr::select(.data$mpg, .data$wt, .data$gear_factor) %>%
qsummary(.)
by_cyl <- mtcars2 %>%
dplyr::group_by(.data$cyl_factor) %>%
summary_table(., new_summary)
在教程中,他计算了组比较的 p 值并将 p 值添加到表中的新列中。我想通过添加更多比较结果(Cohen 的 d 和 95% CI,以及 p 值)来对此进行扩展。然后我想将这些结果添加到每个变量下的新行,而不是作为每个变量旁边的新列)。因此我希望输出看起来像这样(我已经为组比较测试编了数字):
6 cylinders (N = 7) 4 cylinders (N = 11) 8 cylinders (N = 14)
mpg
minimum 17.80 21.40 10.40
median (IQR) 19.70 (18.65, 21.00) 26.00 (22.80, 30.40) 15.20 (14.40, 16.25)
mean (sd) 19.74 ± 1.45 26.66 ± 4.51 15.10 ± 2.56
maximum 21.40 33.90 19.20
comparison d = 0.87, 95% CI [0.80, 0.94], p = 0.001
wt
minimum 2.62 1.51 3.17
median (IQR) 3.21 (2.82, 3.44) 2.20 (1.88, 2.62) 3.75 (3.53, 4.01)
mean (sd) 3.12 ± 0.36 2.29 ± 0.57 4.00 ± 0.76
maximum 3.46 3.19 5.42
comparison d = 0.87, 95% CI [0.80, 0.94], p = 0.001
所以我有两个问题:
如何向表中添加一行并用一些内容填充它
如何运行分组比较测试,将其以正确的格式放入表格中?
我的主要问题是问题 1,我现在卡住了。如果我能在解决它时获得帮助,我可能能够通过摆弄 DeWitt 的 mpvals 示例自行解决问题 2。虽然我也很乐意在问题 2 上获得帮助。
到目前为止,我已经尝试在 qsummary() 中添加一个空白行,但无法成功。我尝试操纵 summary_table 创建的字符矩阵,但不知道如何操纵它。感谢您的帮助!
给每个行组添加一个比较行不是什么好事
qwraps2::summary_table
直接支持。这是因为
该问题与降价的局限性和复杂性有关
支持实现 table 的跨越多列的所有不同方式
在 LaTeX 中。
用qwraps2::summary_table
生成主table很好
初始点。构建输出 table 本身将需要一些其他的
包。
随着qwraps2 0.5.0版发布,mtcars2数据导出
数据集,不需要显式构建。
library(qwraps2)
options(qwraps2_markup = "markdown")
summaries <- qsummary(mtcars2[, c("mpg", "wt", "gear_factor")])
by_cyl <-
summary_table(mtcars2, summaries = summaries, by = "cyl_factor")
请注意,summary_table
的输出是一个字符矩阵。
str(by_cyl)
#> 'qwraps2_summary_table' chr [1:11, 1:3] "17.80" "19.70 (18.65, 21.00)" ...
#> - attr(*, "dimnames")=List of 2
#> ..$ : chr [1:11] "minimum" "median (IQR)" "mean (sd)" "maximum" ...
#> ..$ : chr [1:3] "6 cylinders (N = 7)" "4 cylinders (N = 11)" "8 cylinders (N = 14)"
#> - attr(*, "rgroups")= Named int [1:3] 4 4 3
#> ..- attr(*, "names")= chr [1:3] "mpg" "wt" "gear_factor"
我将报告而不是 Choen 的 D,并且 F-statistic 和 p-value 形成一个
方差分析。
mpg_comp <-
paste(extract_fstat(lm(mpg ~ cyl_factor, data = mtcars2)),
extract_fpvalue(lm(mpg ~ cyl_factor, data = mtcars2)),
collapse = ", ")
wt_comp <-
paste(extract_fstat(lm(wt ~ cyl_factor, data = mtcars2)),
extract_fpvalue(lm(wt ~ cyl_factor, data = mtcars2)),
collapse = ", ")
mpg_comp
#> [1] "$F_{2, 29} = 39.70$ *P* < 0.0001"
wt_comp
#> [1] "$F_{2, 29} = 22.91$ *P* < 0.0001"
要构建 table,有很多选择。跨越多个列
降价不是微不足道的。不同风格的降价将呈现
tables 不同。有些会支持多列跨越,其他风格
不会。
对于降价 table,我建议使用比较的新列
报道。对于 by_cyl
table 我会把 F stat 和 p-value 放在
报告平均值的行。这将统计测试和结果
在与汇总统计相关的行上。
by_cyl2 <- cbind(by_cyl, "comparison" = " ")
by_cyl2[grepl("mean", rownames(by_cyl2)), "comparison"] <- c(mpg_comp, wt_comp)
by_cyl2
#>
#>
#> | |6 cylinders (N = 7) |4 cylinders (N = 11) |8 cylinders (N = 14) |comparison |
#> |:----------------------------|:--------------------|:--------------------|:--------------------|:--------------------------------|
#> |**mpg** | | | | |
#> | minimum |17.80 |21.40 |10.40 | |
#> | median (IQR) |19.70 (18.65, 21.00) |26.00 (22.80, 30.40) |15.20 (14.40, 16.25) | |
#> | mean (sd) |19.74 ± 1.45 |26.66 ± 4.51 |15.10 ± 2.56 |$F_{2, 29} = 39.70$ *P* < 0.0001 |
#> | maximum |21.40 |33.90 |19.20 | |
#> |**wt** | | | | |
#> | minimum |2.62 |1.51 |3.17 | |
#> | median (IQR) |3.21 (2.82, 3.44) |2.20 (1.89, 2.62) |3.75 (3.53, 4.01) | |
#> | mean (sd) |3.12 ± 0.36 |2.29 ± 0.57 |4.00 ± 0.76 |$F_{2, 29} = 22.91$ *P* < 0.0001 |
#> | maximum |3.46 |3.19 |5.42 | |
#> |**gear_factor** | | | | |
#> | 3 forward gears |2 (29) |1 (9) |12 (86) | |
#> | 4 forward gears |4 (57) |8 (73) |0 (0) | |
#> | 5 forward gears |1 (14) |2 (18) |2 (14) | |
如果比较的是新行,我喜欢使用
summary 添加一个空白行,然后将比较添加到空白行。
summaries[[1]] <- c(summaries[[1]], "comparison" = ~ qwraps2::frmt(""))
summaries[[2]] <- c(summaries[[2]], "comparison" = ~ qwraps2::frmt(""))
by_cyl3 <- summary_table(mtcars2, summaries, by = "cyl_factor")
by_cyl3[grepl("comparison", rownames(by_cyl3)), 1] <- c(mpg_comp, wt_comp)
by_cyl3
#>
#>
#> | |6 cylinders (N = 7) |4 cylinders (N = 11) |8 cylinders (N = 14) |
#> |:----------------------------|:--------------------------------|:--------------------|:--------------------|
#> |**mpg** | | | |
#> | minimum |17.80 |21.40 |10.40 |
#> | median (IQR) |19.70 (18.65, 21.00) |26.00 (22.80, 30.40) |15.20 (14.40, 16.25) |
#> | mean (sd) |19.74 ± 1.45 |26.66 ± 4.51 |15.10 ± 2.56 |
#> | maximum |21.40 |33.90 |19.20 |
#> | comparison |$F_{2, 29} = 39.70$ *P* < 0.0001 | | |
#> |**wt** | | | |
#> | minimum |2.62 |1.51 |3.17 |
#> | median (IQR) |3.21 (2.82, 3.44) |2.20 (1.89, 2.62) |3.75 (3.53, 4.01) |
#> | mean (sd) |3.12 ± 0.36 |2.29 ± 0.57 |4.00 ± 0.76 |
#> | maximum |3.46 |3.19 |5.42 |
#> | comparison |$F_{2, 29} = 22.91$ *P* < 0.0001 | | |
#> |**gear_factor** | | | |
#> | 3 forward gears |2 (29) |1 (9) |12 (86) |
#> | 4 forward gears |4 (57) |8 (73) |0 (0) |
#> | 5 forward gears |1 (14) |2 (18) |2 (14) |
这不涉及跨越多个列。这个问题至少
据我所知,non-trivial。我会使用不同的工具和方法
取决于目标文件格式。如果我要构建一个 .pdf,我会
在 LaTeX 中工作,而不是降价,并明确使用 \multicolumn{}{}{}
。如果
目标输出是 html 我会明确地构建一个 html table。
htmlTable 是一个很棒的包
为了那个原因。有兼容性选项可能构建时有帮助
.docx 或其他 Office 风格的输出。
由 reprex package (v0.3.0)
于 2020-09-15 创建
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.0.2 (2020-06-22)
#> os macOS Catalina 10.15.6
#> system x86_64, darwin17.0
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz America/Denver
#> date 2020-09-15
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date lib source
#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.0)
#> backports 1.1.9 2020-08-24 [1] CRAN (R 4.0.2)
#> callr 3.4.4 2020-09-07 [1] CRAN (R 4.0.2)
#> cli 2.0.2 2020-02-28 [1] CRAN (R 4.0.0)
#> crayon 1.3.4 2017-09-16 [1] CRAN (R 4.0.0)
#> desc 1.2.0 2018-05-01 [1] CRAN (R 4.0.0)
#> devtools 2.3.1 2020-07-21 [1] CRAN (R 4.0.2)
#> digest 0.6.25 2020-02-23 [1] CRAN (R 4.0.0)
#> ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.0)
#> evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.0)
#> fansi 0.4.1 2020-01-08 [1] CRAN (R 4.0.0)
#> fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.2)
#> glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2)
#> highr 0.8 2019-03-20 [1] CRAN (R 4.0.0)
#> htmltools 0.5.0 2020-06-16 [1] CRAN (R 4.0.0)
#> knitr 1.29 2020-06-23 [1] CRAN (R 4.0.0)
#> magrittr 1.5 2014-11-22 [1] CRAN (R 4.0.0)
#> memoise 1.1.0 2017-04-21 [1] CRAN (R 4.0.0)
#> pkgbuild 1.1.0 2020-07-13 [1] CRAN (R 4.0.2)
#> pkgload 1.1.0 2020-05-29 [1] CRAN (R 4.0.0)
#> prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.0.0)
#> processx 3.4.4 2020-09-03 [1] CRAN (R 4.0.2)
#> ps 1.3.4 2020-08-11 [1] CRAN (R 4.0.2)
#> qwraps2 * 0.5.0 2020-09-14 [1] local
#> R6 2.4.1 2019-11-12 [1] CRAN (R 4.0.0)
#> Rcpp 1.0.5 2020-07-06 [1] CRAN (R 4.0.0)
#> remotes 2.2.0 2020-07-21 [1] CRAN (R 4.0.2)
#> rlang 0.4.7 2020-07-09 [1] CRAN (R 4.0.2)
#> rmarkdown 2.3 2020-06-18 [1] CRAN (R 4.0.0)
#> rprojroot 1.3-2 2018-01-03 [1] CRAN (R 4.0.0)
#> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.0)
#> stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.2)
#> stringr 1.4.0 2019-02-10 [1] CRAN (R 4.0.0)
#> testthat 2.3.2 2020-03-02 [1] CRAN (R 4.0.0)
#> usethis 1.6.1 2020-04-29 [1] CRAN (R 4.0.0)
#> withr 2.2.0 2020-04-20 [1] CRAN (R 4.0.0)
#> xfun 0.17 2020-09-09 [1] CRAN (R 4.0.2)
#> yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.0)
#>
#> [1] /Library/Frameworks/R.framework/Versions/4.0/Resources/library
我正在关注 Peter DeWitt 在 qwraps2 和 summary_table 上的伟大 tutorial,但我无法继续前进。
到目前为止,这是我的数据和代码:
data(mtcars)
mtcars2 <- dplyr::mutate(mtcars,
cyl_factor = factor(cyl,
levels = c(6, 4, 8),
labels = paste(c(6, 4, 8), "cylinders")),
cyl_character = paste(cyl, "cylinders"),
gear_factor = factor(gear,
levels = c(3, 4, 5),
labels = paste(c(3, 4, 5), "gears")))
new_summary <- mtcars2 %>%
dplyr::select(.data$mpg, .data$wt, .data$gear_factor) %>%
qsummary(.)
by_cyl <- mtcars2 %>%
dplyr::group_by(.data$cyl_factor) %>%
summary_table(., new_summary)
在教程中,他计算了组比较的 p 值并将 p 值添加到表中的新列中。我想通过添加更多比较结果(Cohen 的 d 和 95% CI,以及 p 值)来对此进行扩展。然后我想将这些结果添加到每个变量下的新行,而不是作为每个变量旁边的新列)。因此我希望输出看起来像这样(我已经为组比较测试编了数字):
6 cylinders (N = 7) 4 cylinders (N = 11) 8 cylinders (N = 14)
mpg
minimum 17.80 21.40 10.40
median (IQR) 19.70 (18.65, 21.00) 26.00 (22.80, 30.40) 15.20 (14.40, 16.25)
mean (sd) 19.74 ± 1.45 26.66 ± 4.51 15.10 ± 2.56
maximum 21.40 33.90 19.20
comparison d = 0.87, 95% CI [0.80, 0.94], p = 0.001
wt
minimum 2.62 1.51 3.17
median (IQR) 3.21 (2.82, 3.44) 2.20 (1.88, 2.62) 3.75 (3.53, 4.01)
mean (sd) 3.12 ± 0.36 2.29 ± 0.57 4.00 ± 0.76
maximum 3.46 3.19 5.42
comparison d = 0.87, 95% CI [0.80, 0.94], p = 0.001
所以我有两个问题:
如何向表中添加一行并用一些内容填充它
如何运行分组比较测试,将其以正确的格式放入表格中?
我的主要问题是问题 1,我现在卡住了。如果我能在解决它时获得帮助,我可能能够通过摆弄 DeWitt 的 mpvals 示例自行解决问题 2。虽然我也很乐意在问题 2 上获得帮助。
到目前为止,我已经尝试在 qsummary() 中添加一个空白行,但无法成功。我尝试操纵 summary_table 创建的字符矩阵,但不知道如何操纵它。感谢您的帮助!
给每个行组添加一个比较行不是什么好事
qwraps2::summary_table
直接支持。这是因为
该问题与降价的局限性和复杂性有关
支持实现 table 的跨越多列的所有不同方式
在 LaTeX 中。
用qwraps2::summary_table
生成主table很好
初始点。构建输出 table 本身将需要一些其他的
包。
随着qwraps2 0.5.0版发布,mtcars2数据导出 数据集,不需要显式构建。
library(qwraps2)
options(qwraps2_markup = "markdown")
summaries <- qsummary(mtcars2[, c("mpg", "wt", "gear_factor")])
by_cyl <-
summary_table(mtcars2, summaries = summaries, by = "cyl_factor")
请注意,summary_table
的输出是一个字符矩阵。
str(by_cyl)
#> 'qwraps2_summary_table' chr [1:11, 1:3] "17.80" "19.70 (18.65, 21.00)" ...
#> - attr(*, "dimnames")=List of 2
#> ..$ : chr [1:11] "minimum" "median (IQR)" "mean (sd)" "maximum" ...
#> ..$ : chr [1:3] "6 cylinders (N = 7)" "4 cylinders (N = 11)" "8 cylinders (N = 14)"
#> - attr(*, "rgroups")= Named int [1:3] 4 4 3
#> ..- attr(*, "names")= chr [1:3] "mpg" "wt" "gear_factor"
我将报告而不是 Choen 的 D,并且 F-statistic 和 p-value 形成一个 方差分析。
mpg_comp <-
paste(extract_fstat(lm(mpg ~ cyl_factor, data = mtcars2)),
extract_fpvalue(lm(mpg ~ cyl_factor, data = mtcars2)),
collapse = ", ")
wt_comp <-
paste(extract_fstat(lm(wt ~ cyl_factor, data = mtcars2)),
extract_fpvalue(lm(wt ~ cyl_factor, data = mtcars2)),
collapse = ", ")
mpg_comp
#> [1] "$F_{2, 29} = 39.70$ *P* < 0.0001"
wt_comp
#> [1] "$F_{2, 29} = 22.91$ *P* < 0.0001"
要构建 table,有很多选择。跨越多个列 降价不是微不足道的。不同风格的降价将呈现 tables 不同。有些会支持多列跨越,其他风格 不会。
对于降价 table,我建议使用比较的新列
报道。对于 by_cyl
table 我会把 F stat 和 p-value 放在
报告平均值的行。这将统计测试和结果
在与汇总统计相关的行上。
by_cyl2 <- cbind(by_cyl, "comparison" = " ")
by_cyl2[grepl("mean", rownames(by_cyl2)), "comparison"] <- c(mpg_comp, wt_comp)
by_cyl2
#>
#>
#> | |6 cylinders (N = 7) |4 cylinders (N = 11) |8 cylinders (N = 14) |comparison |
#> |:----------------------------|:--------------------|:--------------------|:--------------------|:--------------------------------|
#> |**mpg** | | | | |
#> | minimum |17.80 |21.40 |10.40 | |
#> | median (IQR) |19.70 (18.65, 21.00) |26.00 (22.80, 30.40) |15.20 (14.40, 16.25) | |
#> | mean (sd) |19.74 ± 1.45 |26.66 ± 4.51 |15.10 ± 2.56 |$F_{2, 29} = 39.70$ *P* < 0.0001 |
#> | maximum |21.40 |33.90 |19.20 | |
#> |**wt** | | | | |
#> | minimum |2.62 |1.51 |3.17 | |
#> | median (IQR) |3.21 (2.82, 3.44) |2.20 (1.89, 2.62) |3.75 (3.53, 4.01) | |
#> | mean (sd) |3.12 ± 0.36 |2.29 ± 0.57 |4.00 ± 0.76 |$F_{2, 29} = 22.91$ *P* < 0.0001 |
#> | maximum |3.46 |3.19 |5.42 | |
#> |**gear_factor** | | | | |
#> | 3 forward gears |2 (29) |1 (9) |12 (86) | |
#> | 4 forward gears |4 (57) |8 (73) |0 (0) | |
#> | 5 forward gears |1 (14) |2 (18) |2 (14) | |
如果比较的是新行,我喜欢使用 summary 添加一个空白行,然后将比较添加到空白行。
summaries[[1]] <- c(summaries[[1]], "comparison" = ~ qwraps2::frmt(""))
summaries[[2]] <- c(summaries[[2]], "comparison" = ~ qwraps2::frmt(""))
by_cyl3 <- summary_table(mtcars2, summaries, by = "cyl_factor")
by_cyl3[grepl("comparison", rownames(by_cyl3)), 1] <- c(mpg_comp, wt_comp)
by_cyl3
#>
#>
#> | |6 cylinders (N = 7) |4 cylinders (N = 11) |8 cylinders (N = 14) |
#> |:----------------------------|:--------------------------------|:--------------------|:--------------------|
#> |**mpg** | | | |
#> | minimum |17.80 |21.40 |10.40 |
#> | median (IQR) |19.70 (18.65, 21.00) |26.00 (22.80, 30.40) |15.20 (14.40, 16.25) |
#> | mean (sd) |19.74 ± 1.45 |26.66 ± 4.51 |15.10 ± 2.56 |
#> | maximum |21.40 |33.90 |19.20 |
#> | comparison |$F_{2, 29} = 39.70$ *P* < 0.0001 | | |
#> |**wt** | | | |
#> | minimum |2.62 |1.51 |3.17 |
#> | median (IQR) |3.21 (2.82, 3.44) |2.20 (1.89, 2.62) |3.75 (3.53, 4.01) |
#> | mean (sd) |3.12 ± 0.36 |2.29 ± 0.57 |4.00 ± 0.76 |
#> | maximum |3.46 |3.19 |5.42 |
#> | comparison |$F_{2, 29} = 22.91$ *P* < 0.0001 | | |
#> |**gear_factor** | | | |
#> | 3 forward gears |2 (29) |1 (9) |12 (86) |
#> | 4 forward gears |4 (57) |8 (73) |0 (0) |
#> | 5 forward gears |1 (14) |2 (18) |2 (14) |
这不涉及跨越多个列。这个问题至少
据我所知,non-trivial。我会使用不同的工具和方法
取决于目标文件格式。如果我要构建一个 .pdf,我会
在 LaTeX 中工作,而不是降价,并明确使用 \multicolumn{}{}{}
。如果
目标输出是 html 我会明确地构建一个 html table。
htmlTable 是一个很棒的包
为了那个原因。有兼容性选项可能构建时有帮助
.docx 或其他 Office 风格的输出。
由 reprex package (v0.3.0)
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.0.2 (2020-06-22)
#> os macOS Catalina 10.15.6
#> system x86_64, darwin17.0
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz America/Denver
#> date 2020-09-15
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date lib source
#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.0)
#> backports 1.1.9 2020-08-24 [1] CRAN (R 4.0.2)
#> callr 3.4.4 2020-09-07 [1] CRAN (R 4.0.2)
#> cli 2.0.2 2020-02-28 [1] CRAN (R 4.0.0)
#> crayon 1.3.4 2017-09-16 [1] CRAN (R 4.0.0)
#> desc 1.2.0 2018-05-01 [1] CRAN (R 4.0.0)
#> devtools 2.3.1 2020-07-21 [1] CRAN (R 4.0.2)
#> digest 0.6.25 2020-02-23 [1] CRAN (R 4.0.0)
#> ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.0)
#> evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.0)
#> fansi 0.4.1 2020-01-08 [1] CRAN (R 4.0.0)
#> fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.2)
#> glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2)
#> highr 0.8 2019-03-20 [1] CRAN (R 4.0.0)
#> htmltools 0.5.0 2020-06-16 [1] CRAN (R 4.0.0)
#> knitr 1.29 2020-06-23 [1] CRAN (R 4.0.0)
#> magrittr 1.5 2014-11-22 [1] CRAN (R 4.0.0)
#> memoise 1.1.0 2017-04-21 [1] CRAN (R 4.0.0)
#> pkgbuild 1.1.0 2020-07-13 [1] CRAN (R 4.0.2)
#> pkgload 1.1.0 2020-05-29 [1] CRAN (R 4.0.0)
#> prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.0.0)
#> processx 3.4.4 2020-09-03 [1] CRAN (R 4.0.2)
#> ps 1.3.4 2020-08-11 [1] CRAN (R 4.0.2)
#> qwraps2 * 0.5.0 2020-09-14 [1] local
#> R6 2.4.1 2019-11-12 [1] CRAN (R 4.0.0)
#> Rcpp 1.0.5 2020-07-06 [1] CRAN (R 4.0.0)
#> remotes 2.2.0 2020-07-21 [1] CRAN (R 4.0.2)
#> rlang 0.4.7 2020-07-09 [1] CRAN (R 4.0.2)
#> rmarkdown 2.3 2020-06-18 [1] CRAN (R 4.0.0)
#> rprojroot 1.3-2 2018-01-03 [1] CRAN (R 4.0.0)
#> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.0)
#> stringi 1.5.3 2020-09-09 [1] CRAN (R 4.0.2)
#> stringr 1.4.0 2019-02-10 [1] CRAN (R 4.0.0)
#> testthat 2.3.2 2020-03-02 [1] CRAN (R 4.0.0)
#> usethis 1.6.1 2020-04-29 [1] CRAN (R 4.0.0)
#> withr 2.2.0 2020-04-20 [1] CRAN (R 4.0.0)
#> xfun 0.17 2020-09-09 [1] CRAN (R 4.0.2)
#> yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.0)
#>
#> [1] /Library/Frameworks/R.framework/Versions/4.0/Resources/library