You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:41:16