如何结合CLI消息与purrr系列函数:用walk()改写循环代码
使用purrr::walk()替代循环实现cli进度条
你可以用purrr::walk()替代原有的for循环,因为walk专门用于遍历集合并执行副作用操作(比如这里的休眠和进度条更新,不需要返回值),和原循环的行为完全匹配。
修改后的代码如下:
library(cli) library(purrr) n <- 10 cli_alert_info("About to start downloads of {n} file{?s}") i <- 0 cli_progress_step("Got {i}/{n} {qty(i)}file{?s}.") # 用walk替代for循环 walk(seq_len(n), function(.x) { Sys.sleep(0.5) cli_progress_update() })
关键说明:
seq_len(n)提供了遍历的序列,和原循环的i in seq_len(n)对应- walk的第二个参数是匿名函数,里面包含原循环体的所有操作:
Sys.sleep(0.5)模拟下载等待,cli_progress_update()更新进度条 - 原有的cli进度条初始化代码无需修改,这部分是进度条的基础设置,和循环方式无关
如果想要更简洁的写法,还可以用公式风格的匿名函数:
walk(seq_len(n), ~{ Sys.sleep(0.5) cli_progress_update() })
内容的提问来源于stack exchange,提问作者Grasshopper_NZ
相关产品推荐
相关产品推荐

