You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny构建奥运奖牌交互式地图时medalt未找到错误如何解决

问题排查与修复方案

核心错误原因

  • 动态列调用错误:input$medal返回的是奖牌类型的字符串,直接传入sum()会对字符串求和而非对对应数据列求和,dplyr环境下引用动态列名需要用.data[[列名]]语法
  • 变量作用域错误:medalt是CountryOly()返回的data.frame的列,不能直接在全局/函数环境下直接调用,需要显式指定所属数据集
  • 响应式对象调用错误:pat、CountryOly都是响应式对象,调用时必须加(),不能直接像普通变量一样使用
  • colorBin使用语法错误:不能直接对数据集管道调用colorBin,该函数返回的是调色板映射函数,需要单独指定映射值域

修复后完整代码

library(shiny)
library(dplyr)
library(ggplot2)
library(readr)
library(htmltools)
library(leaflet)    
library(geojsonio)

ui <- fluidPage(
  selectInput (inputId = "medal", label = "Choose medal", list("Gold", "Silver", "Bronze", "Total")),
  leafletOutput("Olymap"))


server <- function(input, output) {
  shapeurl <- "https://raw.githubusercontent.com/johan/world.geo.json/master/countries.geo.json"
  WorldCountry <- geojson_read(shapeurl, what = "sp")
  Olympics<- read.csv("Olympics.csv")
  groupcountry <- Olympics[, c(2, 10, 11, 12, 13)]
  
  Oly_react <- reactive ({
    groupcountry %>%
      group_by(Country) %>%
      summarise(medalt = sum(.data[[input$medal]]))
  })
  
  CountryOly <- reactive({
    left_join(data.frame(Name = WorldCountry$name), Oly_react(), by = c("Name" ="Country"))
  })
  
  pat <- reactive({ 
    colorBin("viridis", domain = CountryOly()$medalt, na.color = "transparent")
  })
  
  Pops <- reactive({ 
    paste("<strong>", CountryOly()$Name, "</strong>", "<br/>",
          input$medal, "奖牌数:", CountryOly()$medalt)
  })
  
  output$Olymap <-renderLeaflet({
    leaflet(WorldCountry) %>% 
      addTiles() %>%
      addPolygons(
        fillColor = pat()(CountryOly()$medalt),
        weight = 2,
        opacity = 1,
        color = "white",
        fillOpacity = 0.7,
        highlight = highlightOptions(
          weight = 3,
          color = "grey",
          fillOpacity = 0.7,
          bringToFront = TRUE),
        popup = Pops()) 
  })
}

shinyApp(ui = ui, server = server)

额外优化建议

  • 读取Olympics.csv后先检查国家名拼写,避免和GeoJSON中的国家名不匹配导致NA值
  • 可以根据数据范围调整colorBin的分箱规则,让地图颜色区分度更高

内容的提问来源于stack exchange,提问作者Tom J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:45:03