2016-04-22 20 views
9

Ich versuche, basierend auf einigen Eingaben entweder einen Render-Typ (renderPlot) oder einen anderen (renderText) zu erstellen. Hier ist, was ich versucht:Bedingte reaktive Logik glanzbasiertes 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() 
    }) 
} 
``` 

Aber es heißt:

enter image description here

So habe ich versucht, eine reaktive um die bedingte Zugabe was in der Funktion reactive kehrt zurück.

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

Wie kann ich bedingte reaktive Logik haben?

+0

Der Versuch, die unten Stimme zu verstehen. Scheint so, als würde irgendjemand alles von mir abstimmen, unabhängig von der Qualität der Frage. Wenn es einen wirklichen Grund für den Downvote gibt, teile ihn bitte, damit ich mich verbessern kann. –

+2

Es scheint in letzter Zeit eine Menge anonymer Downvoting zu geben, aber das meiste davon ist für ahnungslose Duplikate. Dieses scheint viel blutender zu sein und hatte den zusätzlichen Vorteil, eine gute Antwort von einem relativ neuen Benutzer zu erhalten. Ein großes Lob an euch beide. –

Antwort

9

Um andere Art von Ausgang in Abhängigkeit von der Länge des inputed Zeichenkette erhalten Sie folgendes tun:

1) Erstellen Sie eine dynamische Ausgabe uiOutput,

2) In der reaktiven Umgebung renderUI, je nach die Eingabe, wählen Sie Art der Ausgabe.

3) übertragen die Ausgabe

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

Danke perfekt und ich habe auch viel gelernt. Tolle Erklärung. –