Вы можете выбрать его с помощью [[
после преобразования числового значения в символ:
addCircles(
lng = ~lon
, lat = ~lat
, weight = 1
, stroke = TRUE
, radius = ~sqrt(data[[paste0(input$any1)]])*1000
, popup = paste(data$nomMun, paste("Accidents", data[[paste0(any)]]))
, fillOpacity = 0.2
)
Лучший способ
Лучшим способом было бы объединить данные, чтобы отфильтровать их по столбцу года. Таким образом, вы всегда будете ссылаться на один и тот же столбец в функциях листовки, а данные определяют различия.
library("shiny")
library("data.table")
library("purrr")
library("leaflet")
data <- fread('nomMun,2010,2011,2012,2013,2014,2015,lon,lat
ABRERA,0,0,5,3,2,0,1.12,40.1
AGER,2,0,1,1,0,0,1.54,40.2
AGRAMUNT,1,1,0,2,0,1,1.36,40.3', sep = ",", header = TRUE)
# set any 0 values to NA so they'll be dropped when we convert to long form
data[data == 0] <- NA
molten_data <- melt.data.table(
data = data
, id.vars = c("nomMun", "lon", "lat")
, variable.name = "year"
, variable.factor = FALSE
, na.rm = TRUE
)
molten_data[, `:=`(
year = as.integer(year)
, content = paste(nomMun, paste("Accidents", value))
)]
year_range <- range(molten_data$year)
ui <- fluidPage(
sliderInput(
inputId = "any1"
, label = "Year"
, min = year_range[1]
, max = year_range[2]
, value = year_range[1]
, step = 1
, sep = ""
)
, leafletOutput("MapPlot1")
)
server <- function(input, output, session) {
year_data <- reactive({
molten_data[year == input$any1]
})
output$MapPlot1 <- renderLeaflet({
year_data() %>%
leaflet() %>%
addTiles() %>%
addCircles(
lng = ~lon
, lat = ~lat
, weight = 1
, stroke = TRUE
, radius = ~sqrt(value)*1000
, popup = ~content
, fillOpacity = 0.2
)
})
}
shinyApp(ui, server)