在R语言中生成和为0的特定随机向量的问题求助
解决你的和为0向量生成问题
先看看你写的函数里几个关键的问题:
- 你用到了
sample变量,但这个变量根本没定义,R完全不知道它指代的是什么 output向量没有提前初始化,直接给output[sample[i]]赋值会触发报错- 循环的迭代范围写错了:
for(i in length(sample))只会让i取length(sample)这一个数值,没法遍历所有位置,应该改成for(i in 1:length(sample))或者更稳妥的seq_along(sample)
方法1:修正你的原函数逻辑
假设你想要生成一个指定偶数长度的随机向量(一半是-x,一半是x,位置随机),那可以这样修改:
vector <- function(x, len) { # 先检查长度是否为偶数,不符合就抛出错误提示 if(len %% 2 != 0) stop("向量长度必须是偶数!") # 初始化指定长度的空数值向量 output <- numeric(len) # 生成随机的位置索引,用来分配-x和x sample_pos <- sample(len) # 遍历每个随机位置 for(i in seq_along(sample_pos)) { if(i %% 2 != 0) { output[sample_pos[i]] <- -x } else { output[sample_pos[i]] <- x } } return(output) }
测试一下效果:
vector(2, 4) # 示例输出(每次运行结果不同,因为位置随机):[1] 2 -2 -2 2 sum(vector(2,4)) # 结果必然是0
方法2:更简洁的R风格写法
其实完全不需要用循环,R的向量化编程能让逻辑更清晰、效率更高:
vector_simple <- function(x, len) { if(len %% 2 != 0) stop("向量长度必须是偶数!") # 先构造一半-x、一半x的向量,再随机打乱顺序 sample(c(rep(-x, len/2), rep(x, len/2))) }
比如运行vector_simple(3, 6),会得到一个包含3个-3和3个3的随机排列向量,总和肯定为0,代码也更简洁易读。
内容的提问来源于stack exchange,提问作者Kasimir
相关产品推荐
相关产品推荐

