У меня есть приложение Shiny, в котором пользователи могут выбирать параметры, которые передаются в параметризованный отчет об уценке R. Затем Rmd предоставляет набор сценариев R для извлечения и обобщения данных, создания графиков и т. Д. c. для отчета.
Сценарий, который я использую для извлечения данных, включает в себя параметризованный запрос SQL, который наследует значения от уценки R params
(которые, в свою очередь, наследуются от Shiny input
). Тем не менее, весь процесс останавливается на этом этапе, и я получаю сообщение о том, что params
не существует.
Я вполне уверен, что передача входных данных из параметров Shiny в параметры R уценки работает нормально - поэтому, похоже, проблема заключается в передаче их в сценарий с источником (примечание: это просто сценарий R, а не функция ). Я предполагаю, что это как-то связано со средой, к которой скрипт обращается, когда он получен (хотя он использует соединение с базой данных, сгенерированное в предыдущем фрагменте в уценке R без проблем) - но кроме этого, немного потеряно в отношении как исправить это. Любые идеи будут высоко оценены.
Вот приложение Shiny:
##########################################
# SHINY APP - USER INTERFACE:
ui = fluidPage (
selectInput("pathogen", "Enter pathogen of interest:", c("Campylobacter" = "Campylobacter", "Escherichia" = "Escherichia",
"Salmonella" = "Salmonella", "Shigella" = "Shigella"), selected = "Salmonella" ),
radioButtons("pkginstall", "Install required packages?", c("Yes" = "yes", "No" = "no"),selected = "yes"),
downloadButton("report", "Generate report")
)
##########################################
# SHINY APP - SERVER LOGIC:
#fileInput("download_location","Select File Location"),
server = function(input, output) {
# Create the output:
output$report = downloadHandler(
filename = paste0("Pathogen Report ", input$pathogen, "_", format(Sys.time(),"%d-%b-%Y %H.%M"), ".html"),
content = function(file) {
# Copy the .Rmd to a temporary directory:
tempReport <- file.path(tempdir(), "Pathogen_Report.Rmd")
file.copy("Pathogen_Report.Rmd", tempReport, overwrite = TRUE)
# Set up parameters to pass to Rmd document:
params <- list(pathogen = input$pathogen, pkginstall = input$pkginstall)
# Define name of report:
outname <- paste0("Pathogen Report ", input$pathogen, "_", format(Sys.time(),"%d-%b-%Y %H.%M"), ".html")
# Knit the document:
created_filename <- rmarkdown::render(input = tempReport,
output_file = outname,
params = params,
envir = new.env(parent = globalenv())
)
file.rename(created_filename, file)
}
)
}
##########################################
# SHINY APP - RUN:
# Run app:
shinyApp(ui =ui, server=server)
##################################################################
А вот заголовок YAML уценки R:
---
params:
pathogen:
label: "Enter pathogen of interest:"
value: Shigella
input: select
choices: [Campylobacter, Escherichia, Salmonella, Shigella]
title: "Pathogen Report"
date: "`r format(Sys.time(), '%d %B %Y')`"
output:
phecharts::html_phe:
includes:
in_header: phe_logo.html
---
И соответствующий кусок Источник сценария R:
{r, GDW Query, echo=FALSE, cache=FALSE, message=FALSE, warning=FALSE, results='hide'}
####################################################################
# QUERY DATABASE AND EXTRACT DATA
source("Extract_data.R")
Extract_data.R
содержит запрос SQL, в котором имя патогена должно быть заменено на запрос, унаследованный от параметров уценки R:
# Example SQL to PostgreSQL database:
query <- "SELECT * FROM table1 WHERE table1.organism ~ '^@pathogen'"
# Substituting pathogen for pathogen name from R markdown parameters:
query <- gsub("@pathogen", params$pathogen, query)
# Executing the query:
mydata <- data.table(RPostgres::dbGetQuery(conn = dbcon, statement = query))
Обратите внимание, что соединение с базой данных уже было успешно установлено путем поиска другого сценария в блоке разметки R, предшествующем этому.
Это ошибка, которую я получаю:
Quitting from lines 84-88 (Pathogen_Report.Rmd)
Warning: Error in gsub: object 'params' not found
[No stack trace available]