使用rnorm函数模拟实验大鼠体重数据集时遇到语法错误求解
R批量生成大鼠体重模拟数据方案
方案1:mapply实现(简洁高效,推荐)
通过mapply多参数迭代功能,直接匹配两个数据框的对应值作为参数批量生成随机数:
# 按行优先顺序展平均值、标准差数据框(匹配你给出的调用顺序:先遍历同一周的所有组,再遍历下一周) mean_vec <- as.vector(t(Mean_Data)) sd_vec <- as.vector(t(STD_Data)) # 批量生成随机数,返回列表的每个元素对应一组50个模拟值 sim_result <- mapply(function(m, s) rnorm(n = 50, mean = m, sd = s), mean_vec, sd_vec) # 可选:给结果列命名,格式为「第X周_第Y组」,方便后续调用 week_tag <- paste0("Week", rep(1:15, each = 4)) group_tag <- paste0("Group", rep(1:4, times = 15)) colnames(sim_result) <- paste(week_tag, group_tag, sep = "_")
方案2:嵌套循环实现(逻辑直观,易修改)
如果你更熟悉循环逻辑,可使用双层循环逐行逐列遍历参数:
# 初始化结果存储列表 sim_result <- list() index <- 1 # 外层遍历15个周次 for (week in 1:nrow(Mean_Data)) { # 内层遍历4个实验组 for (group in 1:ncol(Mean_Data)) { sim_result[[index]] <- rnorm(50, mean = Mean_Data[week, group], sd = STD_Data[week, group]) names(sim_result)[index] <- paste0("Week", week, "_Group", group) index <- index + 1 } } # 可选:将列表转换为数据框,每列对应一组模拟值 sim_df <- do.call(cbind, sim_result)
注意事项
- 运行代码前请确认
STD_Data中没有负数值,标准差为负会导致rnorm函数报错 - 后续如果新增实验组,只需调整
Mean_Data和STD_Data的列数,代码逻辑无需修改即可直接运行
内容的提问来源于stack exchange,提问作者Eazie
相关产品推荐
相关产品推荐

