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

使用while循环编写R图书模拟函数:计算进程停止时间及排查代码错误

R语言图书模拟函数问题修复方案

原代码核心错误

  • 入参y被函数内部第一行的y = 0覆盖,所有后续基于y的计算逻辑全部失效
  • 生成shelves向量时,若传入的y小于等于3,rep(0, y-3)会因为长度为负直接抛出错误
  • while循环判断条件shelves != 0返回逻辑向量,仅当shelves所有元素都不为0时才会进入循环,和预期模拟逻辑不符
  • 循环内部无任何状态更新、终止判断逻辑,也没有计时相关代码,要么直接不运行要么陷入死循环

耗时计算实现逻辑

R中统计代码运行耗时可以调用Sys.time()函数,在循环启动前记录起始时间,循环终止后用结束时间减去起始时间,即可得到进程从运行到停止的总耗时。

修正后可运行代码

以下代码默认按照「每次随机抽取一本书,抽到动物书(值为1)时终止运行」的模拟逻辑实现,你可以根据实际需求调整循环内的规则:

# y = 总图书数量,必须大于3
sim_books <- function (y) {
  # 校验入参合法性
  if(y <= 3){
    stop("总图书数量y必须大于3")
  }
  # 生成书架向量:y-3本植物书(值为0),1本动物书(值为1)
  shelves <- c(rep(0, y - 3), 1)
  plant_books <- y-3
  animal_books <- 1
  
  # 记录循环开始时间
  start_time <- Sys.time()
  
  # 循环逻辑:随机抽书,抽到动物书停止
  while (TRUE) {
    # 随机抽取一本书的索引
    pick_idx <- sample(1:length(shelves), 1)
    picked_book <- shelves[pick_idx]
    # 判断是否抽到动物书
    if(picked_book == 1){
      break
    }
  }
  
  # 计算总耗时
  time_stop <- Sys.time() - start_time
  
  return(time_stop)
}

# 测试调用:总图书数量为10
sim_books(10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:54:05