R语言模拟患者数据集报错及可复现性问题求助
修正R语言模拟患者数据集的代码问题
原代码的核心错误
rep()函数用法错误:rep("control", "treatment")的第二个参数必须是重复次数(数值),不能传入字符串,这会直接导致数据框创建失败。sample()未指定样本量且未允许重复:比如sample(20:75)默认只生成56个不重复值(20到75共56个数字),但要生成100条数据,必须指定size=100并开启replace=TRUE(允许重复取值)。set.seed()位置不对:必须放在所有随机生成代码的最开头,才能让所有随机过程的结果完全可复现。- 依赖未声明且思路冗余:
sample_n()是dplyr包的函数,未加载包会报错,且原思路“先创建数据集再抽样”完全没必要,直接生成100条数据更高效。
修正后的可运行代码(Base R版本,无需额外包)
# 设置随机种子,必须放在所有随机操作最前面,保证每次运行结果一致 set.seed(30) # 直接生成100条模拟患者数据 pulse_sim <- data.frame( # 按1:1比例生成对照组和治疗组,共100条 group = rep(c("control", "treatment"), each = 50), # 从20-75岁中随机抽取100个值,允许重复 age = sample(20:75, size = 100, replace = TRUE), # 随机生成性别,可通过prob调整比例(这里是1:1) gender = sample(c("male", "female"), size = 100, replace = TRUE, prob = c(0.5, 0.5)), # 生成40-120的静息心率 resting_pulse = sample(40:120, size = 100, replace = TRUE), # 生成140-220cm的身高 height_cm = sample(140:220, size = 100, replace = TRUE) ) # 查看前6条数据验证结果 head(pulse_sim)
代码说明
- 调整分组比例:如果需要非1:1的分组,比如60个对照组、40个治疗组,把
group行改成rep(c("control", "treatment"), times = c(60, 40))即可。 - 控制重复取值:如果某个变量的取值范围足够大(比如超过100个不同值),可以去掉
replace=TRUE,生成不重复的随机值。 - 性别比例调整:修改
prob参数的数值就能改变男女比例,比如prob = c(0.6, 0.4)表示60%男性、40%女性。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

