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

调用YouTube API获取频道数据时遇行数量不匹配错误的求助

调用YouTube API获取频道数据时遇行数量不匹配错误的求助

看起来你遇到的问题是创建标准化数据框时,部分频道的API返回字段存在空值,导致不同列的行数不一致(比如有的字段有1条数据,有的字段是0条),最终触发了arguments imply differing number of rows: 1, 0错误。我来帮你分析下原因和解决办法:

问题根源

YouTube API返回的频道数据不是所有字段都保证存在的:

  • 比如部分频道可能没有设置公开的country信息,返回的snippet.country就是空值;
  • 有些频道隐藏了订阅数,statistics.subscriberCount会返回空,只有hiddenSubscriberCount为TRUE;
  • 甚至少数情况下,某些统计字段可能因为API返回异常而缺失。

这些空值字段在转化为数据框列时,长度为0,和其他有值的字段(长度为1)冲突,导致报错。

解决办法

1. 给空值字段填充NA,保证列长度一致

修改standardized_df的创建逻辑,对每个字段做空值判断,不存在的话填充NA,确保所有列的长度都是1:

standardized_df <- data.frame(
  channel_id = ifelse(is.null(channel.df$id), NA, channel.df$id),
  title = ifelse(is.null(channel.df$snippet.title), NA, channel.df$snippet.title),
  description = ifelse(is.null(channel.df$snippet.description), NA, channel.df$snippet.description),
  published_at = ifelse(is.null(channel.df$snippet.publishedAt), NA, channel.df$snippet.publishedAt),
  country = ifelse(is.null(channel.df$snippet.country), NA, channel.df$snippet.country),
  view_count = ifelse(is.null(channel.df$statistics.viewCount), NA, as.numeric(channel.df$statistics.viewCount)),
  subscriber_count = ifelse(is.null(channel.df$statistics.subscriberCount), NA, as.numeric(channel.df$statistics.subscriberCount)),
  hiddensub_count = ifelse(is.null(channel.df$statistics.hiddenSubscriberCount), NA, channel.df$statistics.hiddenSubscriberCount),
  video_count = ifelse(is.null(channel.df$statistics.videoCount), NA, as.numeric(channel.df$statistics.videoCount)),
  stringsAsFactors = FALSE
)

另外建议把统计类字段(比如view_count)转成数值型,方便后续的数据分析操作。

2. 优化前置判断逻辑,跳过无效数据

你之前的判断逻辑已经覆盖了items存在且不为空的情况,但可以再加上一层判断,确保channel.df确实有数据:

if ("items" %in% names(channel.json) && length(channel.json$items) > 0) {
  channel.df <- channel.json$items
  # 新增判断:确保channel.df有有效数据行
  if (nrow(channel.df) > 0) {
    # 这里放创建standardized_df的代码
    channel_data_list[[channel_id]] <- standardized_df
  } else {
    print(paste("Warning: No valid data found for channel ID", channel_id))
  }
} else {
  print(paste("Warning: No items returned for channel ID", channel_id))
}

这样可以跳过那些API返回了items但内容为空的异常情况,避免后续代码出错。

测试建议

你可以在创建standardized_df之前,先打印出当前channel.df的所有字段,看看哪些字段是空的:

print(paste("Checking fields for channel ID", channel_id))
str(channel.df)

这样能更直观地定位到是哪个字段导致的行数不匹配问题。

备注:内容来源于stack exchange,提问作者Just_an_avg_human

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:09:52