2016-04-22 29 views
9

Sto tentando di eseguire contiditonally un tipo di rendering (renderPlot) o un altro (renderText) in base a qualche input. Ecco cosa ho provato:Logica reattiva basata su logica reattiva lucida

--- 
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() 
    }) 
} 
``` 

Ma afferma:

enter image description here

Così ho provato ad aggiungere un reattivo attorno al condizionale con conseguente ritorno della funzione reactive rendimenti.

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

Come posso avere una logica reattiva condizionale?

+0

Cercando di capire il voto verso il basso. Sembra che qualcuno stia votando tutto mio indipendentemente dalla qualità delle domande. Se c'è una vera ragione per il downvote per favore condividi così che io possa migliorare. –

+2

Ultimamente sembra esserci un sacco di downvoting anonimo, ma la maggior parte è per duplicati clueless, questo sembra molto più sanguinante e ha il vantaggio di trarre una buona risposta da un relativamente nuovo useR. Complimenti a tutti e due. –

risposta

9

Per ottenere diversi tipi di uscita a seconda della lunghezza della stringa di caratteri inputed si può fare seguente:

1) Creare un output dinamico uiOutput,

2) In ambiente reattivo renderUI, a seconda l'input, scegli il tipo di output.

3) Rendere l'uscita

--- 
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

Grazie perfetto e ho imparato molto anche io. Ottima spiegazione. –