背景:使用 Purrr 過濾資料集并使用 ggplot 繪制一系列圖形(在 RMarkdown 中,用于 Shiny)
在解決了上面的上一個問題之后,我現在有了一個 .Rmd 檔案,該檔案將生成一個帶有節標題、圖表和目錄的 Word 檔案。
仍然存在以下問題:
- 部分標題和圖表不交錯。我目前擁有的是:
標題1
標頭2
標題3
圖1
圖2
圖3
我的代碼應該如何修改以產生:
標題1
圖1
標頭2
圖2
標題3
圖3
反而?
word檔案包括方括號中的數字,例如“[[1]]”、“[[2]]”等,我相信這些數字會與圖表一起列印。如何洗掉這些?
對于每個圖表,我想要一個樣板陳述句,其中包含有關資料的陳述,特別是位于虛線之外的資料點數量 /- 2SD 的平均值。我已經嘗試通過包括例如添加它
report.data %>%
dplyr::filter(identifier == x) %>%
paste(eval("r sum(result < mean(result) - 2 * sd(result))"), " results out of bounds.")
在函式中,但這會將圖形轉換為文本(!)。
與往常一樣,我們將不勝感激任何可以提供的幫助或建議 - 感謝您的閱讀!
生成示例資料并生成報告的腳本:
library(dplyr)
set.seed(1234)
test1.level1.analyser1 <- data.frame(
result = rnorm(25, mean = 2.5, sd = 0.2),
test = c("test1"),
level = c("level1"),
sample.no = c(1:25),
analyser = c("analyser1")
)
test1.level1.analyser2 <- data.frame(
result = rnorm(25, mean = 2.6, sd = 0.1),
test = c("test1"),
level = c("level1"),
sample.no = c(1:25),
analyser = c("analyser2")
)
test1 <- rbind(test1.level1.analyser1, test1.level1.analyser2)
test2.level1.analyser1 <- data.frame(
result = rnorm(25, mean = 10, sd = 2),
test = c("test2"),
level = c("level1"),
sample.no = c(1:25),
analyser = c("analyser1")
)
test2.level1.analyser2 <- data.frame(
result = rnorm(25, mean = 9.5, sd = 0.75),
test = c("test2"),
level = c("level1"),
sample.no = c(1:25),
analyser = c("analyser2"))
test2.level2.analyser1 <- data.frame(
result = rnorm(25, mean = 30, sd = 1.8),
test = c("test2"),
level = c("level2"),
sample.no = c(1:25),
analyser = c("analyser1")
)
test2.level2.analyser2 <- data.frame(
result = rnorm(25, mean = 25, sd = 0.75),
test = c("test2"),
level = c("level2"),
sample.no = c(1:25),
analyser = c("analyser2"))
test2.level2 <- rbind(test2.level2.analyser1, test2.level2.analyser2)
test2 <- rbind(test2.level1, test2.level2)
write.csv(test1, "test1.csv", row.names = FALSE)
write.csv(test2, "test2.csv", row.names = FALSE)
###
report.data <- rbind(test1, test2) %>% mutate(identifier = paste(test, level, sep = " "))
rmarkdown::render("report.Rmd", params = list(report.data = report.data), output_file = "intersite.comparison.report.doc")
report.Rmd 檔案:
---
title: "Inter-site IQC Comparison Report"
output: word_document
toc: yes
---
```{r setup, include=FALSE, comment = "", results = 'asis', echo = FALSE}
library(dplyr)
library(ggplot2)
library(purrr)
knitr::opts_chunk$set(echo = FALSE)
my_plot <- function(df) {
ggplot(df, aes(x = sample.no, y = result))
geom_point(aes(colour = analyser))
geom_hline(aes(yintercept = mean(result) 2 * sd(result)), colour = "red", linetype = "dashed")
geom_hline(aes(yintercept = mean(result) - 2 * sd(result)), colour = "red", linetype = "dashed")
theme_classic()
theme(legend.title = element_blank())
labs(
# the title above the plot, based on information in the filtered df
title = paste0("Inter-site comparison for ", unique(df$identifier)),
x = "Sample number",
y = "Result",
# the text below, based on data in the filtered data frame
caption = paste0("Caption here."))
expand_limits(y = 0)
coord_cartesian(xlim = c(0, max(df$sample.no) 2))
theme(
# configure the caption / sentence below
plot.caption=element_text(size=12, hjust = 0, margin = margin(t=20)),
# add some buffer at bottom as spacing between plots
plot.margin = margin(b=50)
)
}
```
```{r, comment = "", results = 'asis', echo = FALSE}
purrr::map(unique(report.data$identifier),
function(x) {
#section heading
cat("#", (x), "\n")
# filter data before passing it to the plot function
report.data %>%
dplyr::filter(identifier == x) %>%
my_plot()
#report.data %>%
#dplyr::filter(identifier == x) %>%
#paste(eval("r sum(result < mean(result) - 2 * sd(result))"), " results out of bounds.")
}
)
```
編輯:地圖功能的代碼的當前版本,遵循 Sean van der Merwe 的善意建議,如下:
purrr::map(unique(report.data$identifier),
function(x) {
#section heading
cat("#", (x), "\n")
cat("\n\n")
# filter data before passing it to the plot function
report.data %>%
dplyr::filter(identifier == x) %>%
my_plot() %>% print()
cat("\n\n")
#report.data %>%
#dplyr::filter(identifier == x) %>%
#paste(eval("r sum(result < mean(result) - 2 * sd(result))"), " results out of bounds.")
}
) -> results
uj5u.com熱心網友回復:
編輯:
試試吧myplot() %>% print(),也許。您需要將繪圖實際發送到輸出ggplot2。
抱歉沒早點看到,這才是真正的癥結所在:這些圖最后出來的原因,根本上是因為它們是map函式的輸出,所以它們map在所有處理后被存盤并作為一個組輸出.
原來的想法:
我經常以類似的方式交錯結果。我相信您的問題可能與沒有足夠的"\n"s. 正常撰寫 markdown 時,您會在段落之間留一行打開,因此在這里您以編程方式生成的 markdown 必須"\n\n"指示當前行的結尾和下面的打開行。這也適用于情節之后和結果之后。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/435058.html
