Условно отображать разметку отформатированного текста на основе блестящего ввода - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь создать Rmarkdown, который отображает различное количество текста на основе пользовательского ввода в блестящем приложении. Я сделал базовый пример ниже. Есть 2 ввода текста и флажок. Если флажок установлен в ложь, в уценку будет напечатано только значение 1-го текстового поля. Если флажок установлен в true, то оба значения печатаются. Я хочу, чтобы выходные данные для обоих текстовых полей отображались как выходные данные 1-го текстового поля.

Ui:

library(shiny)
library(shinyjs)

ui <- fluidPage(


  titlePanel("Hello Shiny!"),

  sidebarLayout(

    sidebarPanel(

      textInput(inputId = "text1", 
                label =  "1st text", value = "1st text"),

      checkboxInput(inputId = "checkBox", label = "Checkbox"),

      textInput(inputId = "input2", 
                  label =  "2nd text", value = "2nd text"),

      downloadButton("download", "Download button")

    ),

    mainPanel(

      verbatimTextOutput("checkBoxValue")

    )
  )
) 

Сервер:

library(shiny)
library(shinyjs)

server <- function(input, output) {

output$checkBoxValue <- renderText(input$checkBox)


Text1Value <- reactive({input$text1})
BoxValue<- reactive(input$checkBox)
Input2Value <- reactive({input$input2})

output$download <- downloadHandler(
  filename = "Test.docx",
  content = function(file) {
    tempReport <- file.path(tempdir(), "TestRMD.Rmd")
    file.copy("TestRMD.Rmd", tempReport, overwrite = TRUE) 


    params = list(


      Text1Value = Text1Value(),
      BoxValue = BoxValue(),
      Input2Value = Input2Value()

    )

    rmarkdown::render(
      tempReport,
      output_file = file,
      params = params,
      envir = new.env(parent = globalenv()),
      quiet = FALSE
    )
  })
}

Rmarkdown:

---
title: "Test"
output: word_document
params: 
    Text1Value: NA
    BoxValue: NA
    Input2Value: NA
---

```{r echo= FALSE, message = FALSE, include = FALSE}

library(shiny)
library(knitr)
library(latex2exp)


Text1Value<- params$Text1Value
BoxValue<- params$BoxValue
Input2Value<- params$Input2Value

```

# Value for text 1 is `r Text1Value`

```{r, echo=FALSE}
if(BoxValue == TRUE){
"Value for input 2 is `r Input2Value`"
}

```

В настоящее время я могу сделать так, чтобы текст из второго текстового вывода отображался условно, однако он выглядит как R-код. Я хочу, чтобы он отображался в том же формате, что и выходные данные для 1-го ввода текста.

Как бы я выполнил sh это?

1 Ответ

1 голос
/ 23 февраля 2020

Следующее в вашем Rmd файле. Вы уже находитесь в блоке кода и не нуждаетесь в дополнительном строчном форматировании. Вы можете использовать results = 'asis' в своем блоке, а также добавить заголовок (#) для идентичного форматирования, если хотите:

```{r, echo=FALSE, results='asis'}
if(BoxValue == TRUE){
  cat("# Value for input 2 is", Input2Value)
}
```
...