2016-04-22 4 views
9

Я пытаюсь contiditonally сделать один вид рендеринга (renderPlot) или другой (renderText) на основе некоторого ввода. Вот что я пробовал:Условная реактивная логика блестящая на основе flexdashboard

--- 
title: "Citation Extraction" 
output: 
    flexdashboard::flex_dashboard: 
    vertical_layout: scroll 
    orientation: rows 
    social: menu 
    source_code: embed 
runtime: shiny 
--- 

```{r setup, include=FALSE} 
library(flexdashboard) 
library(shiny) 
``` 

Sidebar {.sidebar} 
===================================== 

```{r} 
textInput("txt", "What's up?:") 
``` 

Page 1 
===================================== 

### Chart A 

```{r} 
urtxt <- reactive({input$txt}) 

if (nchar(urtxt()) > 20){ 
    renderPlot({plot(1:10, 1:10)}) 
} else { 
    renderPrint({ 
     urtxt() 
    }) 
} 
``` 

Но он заявляет:

enter image description here

Так что я попытался добавить реакционноспособный вокруг условной в результате возвращения функция reactive возвращается.

reactive({ 
    if (nchar(urtxt()) > 20){ 
    renderPlot({plot(1:10, 1:10)}) 
} else { 
    renderPrint({ 
     urtxt() 
    }) 
} 
}) 

Как я могу условно реагировать на логику?

+0

Пытаясь понять вниз голосование. Похоже, кто-то все голосует, несмотря на качество вопроса. Если есть реальная причина для downvote, пожалуйста, поделитесь, чтобы я мог улучшить. –

+2

В последнее время, похоже, много анонимного downvoting, но большая часть из них - для невежественных дубликатов. Это похоже на гораздо более кровоточащий край и обладает дополнительным преимуществом, позволяющим получить хороший ответ от относительно нового использования. Престижность вам обоим. –

ответ

9

Чтобы получить различные виды продукции в зависимости от длины занесены строки символов, вы можете сделать следующее:

1) Создание динамического выхода uiOutput,

2) В реактивной среде renderUI, в зависимости от вход, выберите вид выхода.

3) Рендер выход

--- 
title: "Citation Extraction" 
output: 
flexdashboard::flex_dashboard: 
vertical_layout: scroll 
orientation: rows 
social: menu 
source_code: embed 
runtime: shiny 
--- 

```{r setup, include=FALSE} 
library(flexdashboard) 
library(shiny) 
``` 


Sidebar {.sidebar} 
===================================== 

```{r, echo = F} 
textInput("txt", "What's up?:", value = "") 
``` 

Page 1 
===================================== 

### Chart A 

```{r, echo = F} 
uiOutput("dynamic") 

output$dynamic <- renderUI({ 
    if (nchar(input$txt) > 20) plotOutput("plot") 
    else textOutput("text") 
}) 

output$plot <- renderPlot({ plot(1:10, 1:10) }) 
output$text <- renderText({ input$txt }) 

``` 
+1

Спасибо, отлично, и я тоже многому научился. Отличное объяснение. –