Использование входных значений ползунка в качестве переменных - PullRequest
0 голосов
/ 26 января 2019

Я новичок в Shiny и все еще думаю о синтаксисе.Я создаю приложение, в котором я хотел бы использовать значения ползунка диапазона, чтобы обрезать растр.Однако я не могу понять, как интегрировать его вне функции рендеринга.

Например, если у меня есть простой растр 10x10 со значениями от 1: 100, я бы хотел оставить толькоДиапазон в слайдере.Делая это вручную с установленными числами, скажем, 20-40, я бы запустил что-то вроде:

r<-raster(ncol = 10, nrow = 10)
values(r) <- 1:ncell(r)
plot(r)
r[r <= 20] <- NA
r[r >=40] <- NA
plot(r)

Но я не могу понять, как интегрировать переменные ползунка в этот тип установки.Я добавил renderText, чтобы убедиться, что я правильно ссылаюсь на значения, но не могу понять, как использовать эти значения вне функции рендеринга.

ui <- fluidPage(
  sliderInput("range","range:", min = 1, max = 100, value = c(10,50)),
  plotOutput("original"),
  textOutput("range"),
  plotOutput("cropped")
  )

server<- function(input, output){
  r<-raster(ncol = 10, nrow = 10)
  values(r) <- 1:ncell(r)
  r2<-r
  reactive({r2[r2 <= input$range[1]] <- NA})
  reactive({r2[r2 >= input$range[2]] <- NA})
  output$original<- renderPlot(plot(r))
  output$cropped<- renderPlot(plot(r2))
  range <- reactive({cbind(input$range[1], input$range[2])})
  output$range<- renderText({range()})
}


shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 26 января 2019

Чтобы ваши переменные r и r2 слушали изменения в слайдере, вы должны сделать его реактивным:

library(raster)

ui <- fluidPage(
  sliderInput("range","range:", min = 1, max = 100, value = c(10,50)),
  plotOutput("original"),
  textOutput("range"),
  plotOutput("cropped")
)

server<- function(input, output){

  r <- reactive({
    localVar <- raster(ncol = 10, nrow = 10)
    values(localVar) <- 1:ncell(localVar)
    # return
    localVar
  })
  r2 <- reactive({
    localVar <- r()
    localVar[localVar <= input$range[1]] <- NA
    localVar[localVar >= input$range[2]] <- NA
    # return
    localVar
  })
  output$original<- renderPlot(plot(r()))
  output$cropped<- renderPlot(plot(r2()))
  range <- reactive({cbind(input$range[1], input$range[2])})
  output$range<- renderText({range()})
}


shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...