R语言如何编写递归函数采样35组两位随机数
R批量生成两位随机数的实现方案
递归写法实现
R原生支持递归函数定义,你需要的计数终止逻辑可以通过给函数增设计数参数、结果存储参数实现:递归调用时累加计数,当计数达到目标采样组数时触发终止条件,直接返回累积的结果即可。
参考实现代码:
# 定义递归采样函数 sample_two_digit_recur <- function(target_group, res = list(), count = 0) { # 终止条件:已采样组数达到目标值,整理结果后返回 if (count == target_group) { return(do.call(rbind, res)) } # 生成单组两位随机数 new_group <- sample(0:9, 2, replace = TRUE) # 递归调用:更新结果列表、计数+1 sample_two_digit_recur( target_group = target_group, res = c(res, list(new_group)), count = count + 1 ) } # 调用函数生成35组随机数,可加set.seed固定随机结果方便复现 set.seed(123) result_35 <- sample_two_digit_recur(35)
上述代码里count参数初始值为0,每完成1组采样就加1,当数值等于你设定的目标组数35时,就会停止递归,不会出现多采样或者无限递归的问题。
更适配R特性的简化写法
R是向量化编程语言,这类批量重复操作不需要写递归,也不需要逐行重复写采样代码,一行就能完成任意组数的采样需求,运行效率比递归高很多:
- 方法1:一次性生成所有随机数后按组重组
# 总共需要35*2=70个0-9的随机数,重组为35行2列的矩阵,每行对应1组 set.seed(123) result_simple <- matrix(sample(0:9, 35*2, replace = TRUE), ncol = 2, byrow = TRUE)
- 方法2:用
replicate批量执行单组采样逻辑
set.seed(123) result_rep <- t(replicate(35, sample(0:9, 2, replace = TRUE)))
如果你需要把每组两个数字拼接为真正的两位整数(例如c(2,9)转为29),直接对结果做向量运算即可:result_simple[,1] * 10 + result_simple[,2]就能得到35个0-99区间的两位整数。
内容的提问来源于stack exchange,提问作者star
相关产品推荐
相关产品推荐

