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

封装rStrava包调用Strava API的R函数失效问题求助

解决rStrava封装函数后"Object 'high' not found"报错问题

问题核心

将调用Strava API的rStrava代码封装为函数后,执行时触发Object "high" not found错误,但相同逻辑的独立代码可正常运行。函数预期功能是根据传入的会话ID、分辨率参数,返回指定名称的训练数据集。

报错原因

报错直接原因是调用函数时未给resolution参数加引号:独立代码中直接使用resolution = "high"(字符串格式),R能正确识别;但封装函数后,若调用时传入resolution = high(无引号),R会将high解析为变量名,尝试查找名为high的对象,而该对象不存在,因此抛出错误。

解决方案

方案1:调用函数时传递字符串参数

调用函数时,确保resolution参数用引号包裹,传递字符串值:

generate_strava_session_data(id = 123456, df_name = "my_strava_data", resolution = "high")

方案2:修改函数,兼容无引号参数输入

如果希望函数能自动处理无引号的参数输入,可在函数内部将resolution转为字符串,同时添加参数合法性验证:

generate_strava_session_data <- function(id, df_name, resolution){
  # 检查依赖包是否安装
  if (!requireNamespace("rStrava", quietly = TRUE)) {
    stop("请先安装rStrava包:install.packages('rStrava')")
  }
  
  # API配置信息
  app_name <- "#"
  app_client_id <- "#"
  app_secret <- "#"
  
  # 获取Strava认证token
  strava_token <- httr::config(token = strava_oauth(app_name,
                                                    app_client_id,
                                                    app_secret,
                                                    app_scope = "activity:read_all"))
  
  # 处理resolution参数:转为字符串并验证合法性
  resolution <- as.character(substitute(resolution))
  valid_resolutions <- c("low", "medium", "high")
  if (!resolution %in% valid_resolutions) {
    stop(paste("resolution参数无效,可选值:", paste(valid_resolutions, collapse = ", ")))
  }
  
  # 获取活动数据与流信息
  my_acts <- get_activity_list(strava_token)
  result <- get_activity_streams(my_acts,
                                 strava_token,
                                 id = id,
                                 resolution = resolution)
  
  # 将结果存入全局环境指定名称
  assign(df_name, result, envir = .GlobalEnv)
  message(paste("数据集", df_name, "已创建"))
  
  # 静默返回结果(可选)
  return(invisible(result))
}

额外优化提示

  • 避免在函数内部重复调用library(),改用requireNamespace()检查包状态,提升运行效率。
  • 若不需要将结果存入全局环境,可删除assign()语句,直接返回result,让用户自行赋值(更符合R函数最佳实践)。

调用示例

两种输入格式均支持:

# 无引号参数
generate_strava_session_data(id = 123456, df_name = "morning_run", resolution = high)
# 带引号参数
generate_strava_session_data(id = 123456, df_name = "morning_run", resolution = "high")

内容的提问来源于stack exchange,提问作者Simen Løkken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:07:55