R:如何基于CSV和用户输入(滑块)的值执行计算?

R:如何基于CSV和用户输入(滑块)的值执行计算?,r,dynamic,shiny,leaflet,reactive,R,Dynamic,Shiny,Leaflet,Reactive,我试图执行一个简单的计算乘法值从CSV和滑块输入值选择。我认为这必须以一种反应性的表达方式进行,但我认为我遗漏了这必须如何运作的部分内容 library(shiny) library(leaflet) library(rgdal) library(dplyr) library(sp) library(ggplot2) library(foreign) library(maptools) setwd("C:/Users/Jared/Dropbox/InteractiveMap/Data/Shape

我试图执行一个简单的计算乘法值从CSV和滑块输入值选择。我认为这必须以一种反应性的表达方式进行,但我认为我遗漏了这必须如何运作的部分内容

library(shiny)
library(leaflet)
library(rgdal)
library(dplyr)
library(sp)
library(ggplot2)
library(foreign)
library(maptools)
setwd("C:/Users/Jared/Dropbox/InteractiveMap/Data/Shapefiles_CSVs")
test1 <- readOGR("BuffaloParcels2015_VacantTest.shp", "BuffaloParcels2015_VacantTest")
test2 <- spTransform(test1, "+proj=longlat")

test_CSV <- read.csv("BuffaloTestSpreadsheet.csv")

test2@data$OBJECTID <- as.integer(test2@data$OBJECTID)

test2@data <- left_join(test2@data, test_CSV, "OBJECTID")

test2$NewField = test2$DEPTH - test2$FRONT

ui <- bootstrapPage(

  tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
  leafletOutput("Buff_map", width = "100%", height = "100%"),
  absolutePanel(bottom = 10, left = 10,
                #headerPanel("Test"),
                #sidebarPanel(
                checkboxInput("green", "Green Space", FALSE),
                uiOutput("greenOut"),

                checkboxInput("slope", "Slope", TRUE),
                uiOutput("slopeOut"), 

                checkboxInput("location", "Location", FALSE),     
                uiOutput("locationOut")

      )
)

server <- function(input, output, session) {

    output$greenOut <- renderUI({
    if (input$green == TRUE){
      sliderInput("greenIn", "Modifier", min=1, max=10, value=5)
    }
  })

  output$slopeOut <- renderUI({
    if (input$slope == TRUE){
      sliderInput("slopeIn", "Modifier", min=1, max=10, value=5)
    }
  }) 

  output$locationOut <- renderUI({
    if (input$location == TRUE){
      sliderInput("LocationIn", "Modifier", min=1, max=10, value=5)
    }
  }) 
  values <- reactiveValues()
    observe({
      values$slopeModder <- isolate ({
      test2$NewFieldReactive = test2$Slope * input$slopeIn
      })
    })


    pal <- colorNumeric(
    palette = "Greens",
    domain = log1p(test2$NewField) 
  )



  bounds <- bbox(test2)
  output$Buff_map <- renderLeaflet({
    leaflet(test2) %>%
      addProviderTiles("CartoDB.Positron") %>%
      #fitBounds(bounds[1,1], bounds[2,1], bounds[1,2], bounds[2,2]) %>%
      setView(-78.8, 42.85, zoom = 13) %>%
      addPolygons(color = ~pal(log1p(TOTAV)), stroke=FALSE, 
                  fillOpacity = .8,
                  popup=~paste("<b>Name of Parcel:</b>", ADDNAME, "<br/>", "<b>Depth:</b>", DEPTH,
                               "<b>%Green:</b>", as.integer(Greenspace), "<br/>",
                               "<b>Slope:</b>",as.integer(Slope), "<br/>",
                               "<b>NewField:</b>",as.integer(NewField), "<br/>",
                               #"<b>NewFieldReactive:</b>",as.integer(NewFieldReactive), "<br/>",
                               "<b>Location:</b>", as.integer(Location)))
  })

}

shinyApp(ui, server)
最后,我想使用计算出的值根据颜色进行分类。以上是我迄今为止所做的尝试,但没有成功。大多数情况下,我想我需要一些关于用户输入和反应式表达式如何工作的技巧,但任何帮助都将不胜感激


谢谢。

这里是一个关于您正在努力实现的目标的最小示例。我已经创造了一个数据声誉与斜坡有价值。我正在显示文本输出中乘以滑块值的输出

library(shiny)

  test2 <- data.frame("Slope" = 1:5)


  ui <- bootstrapPage(

    checkboxInput("slope", "Slope", TRUE),

    uiOutput("slopeOut"),

    textOutput("NewVals")

  )

  server <- function(input, output, session) {

    output$slopeOut <- renderUI({
      if (input$slope == TRUE){
        sliderInput("slopeIn", "Modifier", min=1, max=10, value=5)
      }
    }) 

    values <- reactiveValues()

    observe({
      values$slopeModder <- test2$Slope * input$slopeIn
    })

    output$NewVals <- renderText({values$slopeModder})

  }

  shinyApp(ui, server)

因为我没有你的数据,所以我无法准确地找出你的错误所在。希望这有助于调试您的代码。

您能提供一个示例数据吗?@SBista因此,我将基于ObjectID将CSV加入到Shapefile中。CSV将只有几个带有整数项的简单字段。然后,我想将连接的CSV中的一个字段乘以滑块输入,以获得新值。例如,CSV中的值是4,我想将其乘以滑块输入,比如3,得到12。这些新值将用于确定传单中的显示颜色。我希望这能澄清,让我知道我是否能提供任何其他数据来帮助。谢谢。据我所知,您希望在传单中使用滑块乘以的值。那么,你能试着用“观察”这个词吗{values$slopeModder@SBista谢谢,我试过了,但仍然遇到问题。警告:.getReactiveEnvironment$currentContext中出错:如果没有活动-反应上下文,则不允许执行操作。您尝试了只能从反应表达式或观察者内部执行的操作。堆栈跟踪最内层优先:47:.getReaactiveEnvironment$currentContext 46:.subset2x,impl$get 45:$.reactivevalues 44:$43:colorNumeric 42:server[C:/Users/Jared/Dropbox/InteractiveMap/SampleCodes/ReactiveEnvironmentTest.R68]1:RunAppThank,这对计算组件很有帮助,尽管我仍然对传单有问题,我将在其他时间和地点处理。