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

如何用apply函数或tidyverse优化马种身高体重模拟代码?

优化马种身高体重模拟代码

你的核心需求是避免重复编写每个马种的采样代码,同时能灵活调整采样数量。用tidyverse的工具可以轻松实现,这里提供两种简洁的方案:

方案1:使用purrr::map_dfr遍历行生成样本

library(tidyverse)

horses_meas <- tribble(
    ~breed, ~mean_h, ~sd_h, ~mean_w, ~sd_w,
    "Hannover", 1.69, 0.10, 600, 25,
    "Arabian", 1.50, 0.05, 400, 45,
    "Holsteiner", 1.68, 0.05, 575, 125
)

# 定义每个马种的采样数量,可灵活调整
sample_n <- 20

# 遍历每一行,生成对应样本并合并成数据框
horses <- map_dfr(1:nrow(horses_meas), function(i) {
  bind_cols(
    breed = rep(horses_meas$breed[i], sample_n),
    weight = rnorm(sample_n, horses_meas$mean_w[i], horses_meas$sd_w[i]),
    height = rnorm(sample_n, horses_meas$mean_h[i], horses_meas$sd_h[i])
  )
})

print(horses)

方案2:使用dplyr::rowwise + reframe(更直观的tidyverse风格)

library(tidyverse)

horses_meas <- tribble(
    ~breed, ~mean_h, ~sd_h, ~mean_w, ~sd_w,
    "Hannover", 1.69, 0.10, 600, 25,
    "Arabian", 1.50, 0.05, 400, 45,
    "Holsteiner", 1.68, 0.05, 575, 125
)

sample_n <- 20

horses <- horses_meas %>%
  rowwise() %>%
  reframe(
    breed = breed,
    weight = rnorm(sample_n, mean_w, sd_w),
    height = rnorm(sample_n, mean_h, sd_h)
  )

print(horses)

优势说明

  • 只需修改sample_n就能统一调整所有马种的采样数量,也可以给每个马种单独设置采样数(比如在horses_meas里加一列n,然后用该列代替sample_n)
  • 完全避免了重复编写type_i这类冗余代码,新增马种时只需在horses_meas里添加行即可,无需修改采样逻辑
  • 保持了tidyverse的链式风格,代码可读性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:16:13