生成长度为5的向量随机数的R代码问题求助
嘿,我来帮你拆解下这两段代码的问题和优化方向哈:
代码问题分析
第一段代码的核心问题
你第一段代码里的rep(day*runif(1), elements),问题出在**runif(1)只执行了一次**——它只会生成一个0到1之间的随机数,然后rep()只是把这个数重复了5遍。所以最终t_time里的5个元素完全相同,并不是你想要的5个独立的随机数序列。
举个实际运行的例子(每次随机数会变,但5个值肯定一样):
elements <- 5 day <- 30 t_time <- rep(day*runif(1), elements) t_time # 输出示例:[1] 18.452 18.452 18.452 18.452 18.452
第二段for循环的正确性
你的for循环写法其实是完全没问题的!它会循环5次,每次都调用runif(1)生成一个独立的随机数,最终t_time会得到5个独立的、0到30之间的随机数。
不过可以小优化一下:提前初始化t_time为指定长度的数值向量,比让R自动扩展向量效率更高(尤其是当elements很大的时候):
elements <- 5 day <- 30 t_time <- numeric(elements) # 提前初始化向量 for (i in 1:elements){ t_time[i] <- day*runif(1) } t_time # 输出示例:[1] 2.341 27.890 11.567 20.123 7.654
更简洁的向量化写法
其实在R里完全不需要用for循环,直接利用R的向量化特性就能一步搞定:
elements <- 5 day <- 30 t_time <- day * runif(elements)
runif(elements)会直接生成elements个(也就是5个)0到1之间的独立随机数,再乘以day就得到你想要的0到30之间的随机数序列,代码更简洁也更高效~
内容的提问来源于stack exchange,提问作者user8708316
相关产品推荐
相关产品推荐

