Search code examples
rshinymarkdownr-markdownioslides

'x' and 'y' lengths differ error together but not separately in ioslides


I have two animated ioslides which work fine in separate presentations but when in the same presentation cause the error 'x' and 'y' lengths differ. Here is my MWE.

---
title: "Untitled"
runtime: shiny
output: ioslides_presentation
---

##Outliers

```{r, echo = FALSE, warning=FALSE}
sliderInput("multiplier", label = "Distance:", max = 1.35, min = 1, value = 
1, ticks=FALSE, animate=
          animationOptions(interval = 100, playButton = "run"))

 x     <- seq(5,15,length=50)  
 Day1 <- rnorm(50,mean=10,sd=0.5)

renderPlot({
 Day1[22] <- max(Day1)*input$multiplier
 plot(x,Day1, ylim=c(8.5,15.5))
 text(x=14, y=14.5, labels=paste0("Mean: ", round(mean(Day1),2)))
 text(x=14, y=14, labels=paste0("Median: ", round(median(Day1),2)))
})
```

##bootstrap
```{r, warning=FALSE}
library(plyr)
sliderInput("animation", "Number of samples:", 1,1000,1, step = 1, animate=
          animationOptions(interval=30, loop=FALSE))

x=c()
for (i in 1:1000) {
 x[i] <- round(rnorm(n=200, mean=10, sd=1),1)
}
dfx <- data.frame(x)

renderPlot({
 mp <- 
barplot(count(dfx[1:input$animation,])$freq,count(dfx[1:input$animation,])$x)
   axis(1,at=mp,labels=count(dfx[1:input$animation,])$x)
  legend("topright", legend=paste0("mean: 
",round(mean(dfx[1:input$animation,]),3)), bty="n")
})  

renderUI({
 plotOutput("unsized", height = 500, width = 400)
})
```

Presumably it's something trivial but when I look at the code separately I can't find anything


Solution

  • I think it has something to do with where the x/Day1 is placed. I usually place it inside the renderPlot function like this, which seems to work for me:

    ```{r, echo = FALSE, warning=FALSE}
    inputPanel(
    sliderInput("multiplier", label = "Distance:", max = 1.35, min = 1, value = 
    1, ticks=FALSE, animate=animationOptions(interval = 100, playButton = "run"))
    )
    
    renderPlot({
     x <- seq(5,15,length=50)  
     Day1 <- rnorm(50,mean=10,sd=0.5)
     Day1[22] <- max(Day1)*(input$multiplier)
     plot(x,Day1, ylim=c(8.5,15.5))
     text(x=14, y=14.5, labels=paste0("Mean: ", round(mean(Day1),2)))
     text(x=14, y=14, labels=paste0("Median: ", round(median(Day1),2)))
    })
    ```