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

如何在R中循环传递game_pk调用baseballr获取逐投数据?

解决R循环调用baseballr获取逐投数据的问题

你的核心问题是错误地将game_pk向量包装成了单元素列表,导致循环时无法传入单个比赛ID。以下是正确的循环实现步骤:

1. 正确提取比赛ID向量

不需要把game_pk转成列表,直接提取向量即可:

PKs <- AAA$game_pk

这会得到一个长度为15的向量,每个元素对应一场比赛的唯一标识。

2. 初始化存储结果的容器

创建一个空列表来保存每场比赛的逐投数据(列表适合存储结构一致的多个数据集):

all_pbp <- list()

3. 实现for循环

写法一:按索引遍历

这种写法便于跟踪循环进度,适合调试:

for (i in seq_along(PKs)) {
  # 取出当前比赛的game_pk
  current_pk <- PKs[i]
  # 调用API获取逐投数据
  pbp_data <- mlb_pbp_diff(
    game_pk = current_pk,
    start_timecode = "20230331",
    end_timecode = "20230331"
  )
  # 将结果存入列表,用game_pk作为名称方便后续查找
  all_pbp[[as.character(current_pk)]] <- pbp_data
  # 可选:添加1秒延迟,避免频繁请求触发API限制
  Sys.sleep(1)
}

写法二:直接遍历比赛ID

更简洁的写法,直接遍历向量中的每个元素:

all_pbp <- list()
for (pk in PKs) {
  pbp_data <- mlb_pbp_diff(
    game_pk = pk,
    start_timecode = "20230331",
    end_timecode = "20230331"
  )
  all_pbp[[as.character(pk)]] <- pbp_data
  Sys.sleep(1)
}

错误原因分析

你之前用PKs <- list(AAA$game_pk)得到的是仅包含1个元素的列表,这个元素是完整的game_pk向量。循环时每次传入的是整个向量而非单个ID,导致mlb_pbp_diff函数无法识别,从而执行失败。

后续处理(可选)

如果需要将所有比赛的逐投数据合并成单个数据框,可以用以下方法:

# 使用dplyr包
library(dplyr)
combined_pbp <- bind_rows(all_pbp)

# 或者使用data.table包(效率更高)
library(data.table)
combined_pbp <- rbindlist(all_pbp)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:20:16