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

如何在R中用readline(prompt)输入俱乐部生成FIFA19球员国籍世界地图

修正后可运行的实现方案

你原有代码的核心问题有两点:

  1. 提前合并了全量俱乐部的国籍统计与地图数据,没有针对输入的俱乐部做筛选,Freq列包含所有俱乐部的计数,无法匹配单俱乐部需求
  2. 函数内生成的ggplot对象没有显式打印,且用循环逐行匹配俱乐部的写法冗余,无法正确筛选目标数据

以下是可直接运行的完整代码:

# 前置依赖加载(如果还没加载的话请先运行)
library(tidyverse)
library(maps)

# 你已经提前生成好的国籍-俱乐部统计表保留即可,不需要修改
# nat_per_club_dataframe <- ...(原有生成交叉表的代码不变)

# 实现查询的函数
players_from_where <- function() {
  # 读取用户输入的俱乐部名称
  club_name <- trimws(as.character(readline(prompt="Club: ")))
  
  # 校验俱乐部是否存在
  if (!club_name %in% unique(nat_per_club_dataframe$Club)) {
    stop("输入的俱乐部名称不存在,请检查拼写")
  }
  
  # 筛选对应俱乐部的国籍统计数据
  target_club_data <- nat_per_club_dataframe %>%
    filter(Club == club_name)
  
  # 读取世界地图数据
  worldmap <- map_data("world")
  
  # 合并地图数据与俱乐部国籍统计数据
  merged_data <- merge(
    x = worldmap, 
    y = target_club_data, 
    by.x = "region", 
    by.y = "Nationality", 
    all.x = TRUE
  ) %>% arrange(order)
  
  # 生成并打印地图
  p <- ggplot(data = merged_data, aes(x = long, y = lat, group = group)) +
    geom_polygon(aes(fill = Freq), color = "white", linewidth = 0.1) + # 加国界线更清晰
    scale_fill_viridis_c(na.value = "lightgray", name = "球员数量") + # 无数据的国家用浅灰色
    labs(title = paste0(club_name, " 球员国籍分布")) +
    theme_void() # 更干净的地图主题
  
  print(p)
}

# 调用函数即可触发输入查询
players_from_where()

补充说明

  • 代码里增加了输入校验逻辑,如果输入的俱乐部名称拼写错误会直接给出提示
  • 优化了地图样式,增加了国界线、无数据国家的背景色,视觉效果更清晰
  • 不需要提前合并全量数据,每次查询时只筛选目标俱乐部的数据,运行效率更高

内容的提问来源于stack exchange,提问作者Celine Serry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:39:03