R语言:向量元素随机加减固定百分比的代码错误排查
解决向量元素独立随机加减固定百分比的问题
嘿,我完全懂你碰到的问题了——你当前的代码只从perc里抽取了一个随机值,然后把这个单一值应用到了整个nums向量的所有元素上,所以才会出现所有结果都一模一样的情况。
问题根源
你用的sample(perc, 1)只会从c(0.05, -0.05)里挑出一个数,比如某次运行抽到了-0.05,那整个nums向量的每个元素都会加上1*-0.05,自然所有结果都是0.95了。
修正后的代码
要让每个元素都独立随机选择±0.05%,你需要让sample函数为向量的每个元素都生成一个随机值,只需要给sample加上size = length(nums)参数(指定抽取的数量等于向量长度),同时用replace = TRUE允许重复抽取(默认就是有放回,写上更清晰):
nums <- c(1,1,1,1,1) perc <- c(0.05,-0.05) # 为每个元素单独抽取百分比调整值 new <- nums + (nums * sample(perc, size = length(nums), replace = TRUE))
运行这段代码后,你就能得到类似期望的结果,比如:
new
[1] 1.05 1.05 0.95 0.95 1.05
简化写法小技巧
其实你也可以直接对数值本身做抽样,省去加法计算,逻辑更直观:
new <- nums * sample(c(1.05, 0.95), size = length(nums), replace = TRUE)
这个写法和前面的代码效果完全一致,只是把1 ± 0.05直接转换成了1.05和0.95两个目标值来抽样。
内容的提问来源于stack exchange,提问作者Andrew Bannerman
相关产品推荐
相关产品推荐

