Я пытался реализовать следующее:
- Блестящий файл приложения app.R доступный с веб-сайта, сборка с блестящей приборной панелью
- Rmarkdown файл RMarkdownFile.Rmd отображается в приложении. R
- Блестящий файл модуля fantasticModuleFile.R , содержащий информацию для вывода на веб-сайте
Проблема в том, что когда я пытаюсь запустить app.R с двумя различными способами рендеринга, происходят две вещи:
- ошибка 1: путь для html_dependency не указан
- ошибка 2:
<!–html_preserve–>
и dynamici c элементы не отображаются (sliderInput, selectInput)
Когда я запускаю отдельный модуль, он отлично отрисовывается с обоими подходами и выдает проблемы в браузере.
Все они пишутся и запускаются из RStudio.
Я подозреваю, что проблема может заключаться в рендеринге файлов Rmd, содержащих динамические c блестящие элементы (такие как sliderInput / selectInput) вместо фиксированных (например, цифра ricInput / TextInput). Я безуспешно пробовал много разных вещей.
Кто-нибудь может мне помочь с этим? Заранее спасибо!
app.R
includeRmd <- function(path){
contents <- paste(readLines(path, warn = FALSE), collapse = '\n')
html <- knit2html(text = contents, fragment.only = TRUE, options=c("use_xhtml","smartypants","mathjax","highlight_code", "base64_images"))
Encoding(html) <- 'UTF-8'
HTML(html)
}
# in UI function:
uiOutput('mymarkdown')
server <- function(input, output) {
options(shiny.maxRequestSize=3000*1024^2)
output$mymarkdown <- renderUI({
includeHTML(rmarkdown::render("RMarkdownFile.Rmd")) #Gives error 1
})
output$mymarkdown <- renderUI({
includeRmd("RMarkdownFile.Rmd") #Gives error 2
})
}
RMarkdownFile.Rmd
---
title: "RMarkdownFile"
output: html_document
runtime: shiny
keep_md: yes
---
```{r, echo=FALSE}
source("modules/shinyModuleFile.R")
mymodule_ui("mod3")
callModule(mymodule_server, "mod3", multiply_by=9)
`` `
#the space in the last line is only for editing purposes here (does not exist in original file)
блестящийModuleFile .R
mymodule_ui <- function(id) {
ns <- NS(id)
div(
selectInput(inputId = ns("number"), label = strong("Quality control"),choices = c(2, 3, 4),selected = 2),
textOutput(ns("result"))
)
}
# callModule( ) will magically prefix ids for us in the server function
mymodule_server <- function(input, output, session, multiply_by) {
output$result <- renderText({
paste0(input$number, " times ", multiply_by, " is ", as.numeric(input$number) * multiply_by)
})
}
# Use the module in an app
ui_mult <- fluidPage(
titlePanel("Demonstration of modules"),
h2("Instance 1"),
mymodule_ui("mod1"))
server_mult <- function(input, output, session) {
callModule(mymodule_server, "mod1", multiply_by=3)
#Debugging
observe( print(reactiveValuesToList(input)) )
}
shinyApp(ui_mult, server_mult)
РЕДАКТИРОВАТЬ 1 В основном мне удалось найти решение
app.R
# in UI function:
uiOutput('mymarkdown')
server <- function(input, output) {
options(shiny.maxRequestSize=3000*1024^2)
output$mymarkdown <- renderUI({
includeHTML(rmarkdown::render("RMarkdownFile.Rmd"))
}
RMarkdownFile.Rmd
---
title: "RMarkdownFile"
output: html_document
runtime: shiny
keep_md: yes
---
```{r, echo=FALSE}
source("modules/teste.R")
ui_mult <- fluidPage(
mymodule_ui("mod1"),
mymodule_ui("mod2")
)
server_mult <- function(input, output, session) {
callModule(mymodule_server, "mod1", multiply_by=3)
callModule(mymodule_server, "mod2", multiply_by=23)
}
shinyApp(ui_mult, server_mult)
```
fantasticModuleFile.R
mymodule_ui <- function(id) {
ns <- NS(id)
div(
selectInput(inputId = ns("number"), label = strong("Quality control"),choices = c(2, 3, 4),selected = 2),
textOutput(ns("result"))
)
}
# callModule( ) will magically prefix ids for us in the server function
mymodule_server <- function(input, output, session, multiply_by) {
output$result <- renderText({
paste0(input$number, " times ", multiply_by, " is ", as.numeric(input$number) * multiply_by)
})
}
В моем понимании, это добавляет блестящее приложение внутри Главное приложение. Блестящее приложение (таким образом, оно отображается правильно). введите описание изображения здесь