Are you trying to put `if` statements into a `magritrr` piping chain? A little experiment will show this does not work: > z = 1 > 2 %>% sqrt() %>% if(z==1){log()} %>% if(z==2){sqrt()} %>% sqrt [1] TRUE You can't put logic like that in `magrittr` pipe chains, so take it outside. In your case, put something like this outside the `leaflet` pipe: if(input$map == "1"){ mapdata = data1 mapcol = rgb(215,48,39, max = 255) } if(input$map == "2"){ mapdata = data2 mapcol = rgb(....blah) } etc etc Then in your pipe its: leaflet... %>% addCircleMarkers(data = mapdata, lat = mapdata$Lat, lng = mapdata$Lon, radius = 4, col = mapcol) %>% Some further investigation shows you *can* put `if` in a pipe if you wrap it in cotton-wool: > 2 %>% (if(z==1){log}else{sqrt}) [1] 0.6931472 but just because you can doesn't mean you should. Keep logic out of pipes. Another way of doing this is to build the piped object gradually. Something like: # start m = leaflet() # conditional bits if(a==1){ m = m %>% foo() } if(a==2){ m = m %>% bar() } # bits at the end m = m %>% baz() m # is now my pipe result