本文介绍运行时屏幕上的提示怎么看、怎样用多核加速,以及各步骤大概要多久。
所有提示都用 cli 的样式在当时显示,verbose
控制显示多少:0
不显示,1(默认)显示汇总,2 显示细节。
run_pipeline() 的每一步带编号和耗时(例如
[2/6] Cleaning body weight …
✔ … 1.2s);各项数量右对齐并给出比例,└
表示上一项中的一部分;为 0 的项只在 verbose = 2
时显示,有记录或猪被删掉的项标成黄色。最后的汇总框列出猪数、ADG / ADFI /
FCR 的均值 ± 标准差和需要核查的猪(最多 5 头,其余见
$fcr$per_pig 和
$removed);打印结果(res)时也显示这个汇总框。需要注意的情况(例如部分猪没有达到区间终点)以黄色
! 开头的提示给出,不再作为 R
的”警告信息”攒到最后才打印;相应的猪和原因同时记录在结果的
$removed 或 adg_type、fcr_note
等列中,verbose = 0 时也不会丢失。
示例数据跑一遍完整流程时的提示(节选):
── tidypptsda 1.6.2 · run_pipeline ─────────────────── stage 30-120 kg ──
── [2/6] Cleaning body weight (track + rlm + loess) ─────────────────────
Weight records 31,472
└ adaptation after entry (not used) 3,404 10.8%
└ outliers 5,667 18.0%
└ by tracking 1,543 4.9%
! Pigs: 28 kept, 1 low confidence, 1 removed 1.2s
...
╭ Results NEDAP ──────────────────────────────────────────────╮
│ Pigs 30 in the data · 29 with FCR (23 ok, 6 low confidence) · 1 removed │
│ ADG 1205 ± 133 g/d │
│ ... │
╰───────────────────────────────────────────────────────────────╯
验证函数的提示(分阶段的进度条和结果表)见《验证函数使用指南》。
猪的头数很多时,逐头猪拟合曲线是最耗时的步骤。clean_weight()、calc_adg()、calc_adfi()
和 run_pipeline() 都有 cores 参数:
res <- run_pipeline(nedap, cores = 4) # 用 4 个 CPU 核心
parallel::detectCores() # 查看电脑有几个核心并行使用 R 自带的 parallel 包,不增加依赖,结果与
cores = 1
完全相同。几十头猪时并行没有必要;上千头猪时才有明显的加速效果。在
Windows 上,并行要求本包是正式安装的(而不是用
devtools::load_all() 临时加载)。
save_plots()、write_report()
和各验证函数也有 cores 参数。
内存:每个并行的子进程都要占用内存,猪多、核数多时可能不够用。内存不够时,子进程会被系统停掉,提示
“parallel worker stopped without a
result”,相应的猪记为失败。遇到这种情况,减少 cores,或用
cores = 1。
逐头猪拟合的步骤(clean_weight()、calc_adg()、calc_adfi()
的插补)和 save_plots() 超过 2
秒时会显示进度条,cores > 1 并行时也会显示。在约 1650
头猪、175 万条访问记录的模拟数据上,整个流程约 45 秒(单核):
| 步骤 | 耗时 |
|---|---|
prep_visits() |
约 4 秒 |
clean_weight() |
约 18 秒 |
calc_adg() |
约 12 秒 |
flag_feed_errors() |
约 2 秒 |
calc_adfi() |
约 9 秒 |
calc_fcr() |
< 1 秒 |
验证函数要把数据反复清洗、拟合,耗时长得多,在约 700 头猪、2 个核心时每个函数要 3–6 分钟,见《验证函数使用指南》。