如何在R语言中基于向量y的每个元素生成对应样本向量x?
解决方案
方法1:修正for循环实现
你之前用for循环没成功,大概率是没提前初始化向量或者sample函数的参数没写对。正确的写法如下:
# 先生成y向量 y = sample(0:200, 1e4, replace = TRUE) # 初始化x向量,长度和y一致,避免循环中频繁扩容影响效率 x <- integer(length(y)) # 循环遍历每个元素 for (i in seq_along(y)) { # 从0到y[i]中随机抽取1个样本,指定size=1确保每次取一个值 x[i] <- sample(0:y[i], size = 1) }
方法2:用sapply简化代码(更符合R风格)
R中更推荐用向量化操作替代显式for循环,sapply可以对y的每个元素应用自定义函数,代码更简洁高效:
y = sample(0:200, 1e4, replace = TRUE) x <- sapply(y, function(k) sample(0:k, size = 1))
注意事项
- 当
y[i] = 0时,0:0是单元素向量,sample即使不指定size=1也会返回0,但显式指定size=1能让逻辑更清晰,避免特殊情况出错。 - 如果需要重复抽样(允许同一区间多次抽同一个数),当前的
sample默认是无放回,但因为区间只有一个元素时无放回也没问题;如果是多元素且需要有放回,可添加replace=TRUE参数(不过你的需求里是单次抽取,所以不需要)。
内容的提问来源于stack exchange,提问作者BrownKoi
相关产品推荐
相关产品推荐

