r - 使用滑块输入值作为变量
问题描述
我是 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)
解决方案
要使您的变量 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)
推荐阅读
- reactjs - 根据所需的构建环境使用不同的文件
- android - 我如何使用从一个文件的下拉列表中选择的值到颤动的另一个文件中
- sql - 如何按日期计算两个值中的每一个的行数?
- docker - 在 Docker 中添加主机时如何修复只读错误?
- c# - 将 JSON 数组值合并到单个 CSV 列中
- prometheus - 如何在给定范围内查找使用 promQL 和 Grafana 写入的总数据
- spring - Spring事务唯一ID
- javascript - 请帮我理解为什么创建vue项目时会出错
- javascript - 从 DropDownList 将数据发布到 MVC 控制器
- javascript - 如何让玩家在点击按钮之前不计分地进行游戏?