R语言种群模拟初始环境随机采样失效问题求助
问题原因
你代码里的初始环境采样逻辑是有效的,但输出结果的第0代(初始状态)环境被硬编码成了1,导致你误以为每次初始环境都是环境1。具体看simulate_pop_new函数里这一行:
pop_vector <- c(N_total_init,N_init_wt, N_init_generalist, N_init_specialist, 1)
这里最后一个值固定写了1,而非你随机采样得到的env_temp,所以输出的初始行环境永远是1,但实际模拟使用的初始环境是env_temp的随机值,只是没记录到输出结果里。
修复方案
把初始pop_vector的环境值替换为env_temp,同时调整代码顺序让逻辑更连贯,修改后的函数核心片段如下:
simulate_pop_new <- function(K, N_total_init,N_init_wt, growth_vec1, growth_vec2, growth_vec3, mut_rate, switch_prob) { # 初始无突变体 N_init_generalist <- 0 N_init_specialist <- 0 # 先采样初始环境 env_temp <- sample(1:2, size = 1, replace = T) # 初始化结果向量,使用随机采样的初始环境 pop_vector <- c(N_total_init,N_init_wt, N_init_generalist, N_init_specialist, env_temp) # 初始化种群变量 pop_new <- c(N_total_init, N_init_wt, N_init_generalist, N_init_specialist) tmax <- 1000 j <- 0 # 后续循环逻辑保持不变... }
验证方式
修改后多次运行simulate_pop_new函数,查看输出结果的第0行env列,会看到环境值随机在1和2之间切换,符合预期。
内容的提问来源于stack exchange,提问作者Tiny Lebowski
相关产品推荐
相关产品推荐

