Skip to main content
added 327 characters in body
Source Link
Spacedman
  • 66.5k
  • 6
  • 83
  • 121

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

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.

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
added 228 characters in body
Source Link
Spacedman
  • 66.5k
  • 6
  • 83
  • 121

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.

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

 
  

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.

Source Link
Spacedman
  • 66.5k
  • 6
  • 83
  • 121

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