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

R语言中遍历含负数的序列异常求助:如何获取-10到10的循环值?

问题分析与解决:R语言遍历负数序列出错

你的核心问题出在循环遍历的对象错误,以及后续下标赋值的逻辑问题:

错误点拆解

  1. 循环变量取的是序列索引而非实际值
    你写的for (b in seq(t))中,seq(t)等价于1:length(t)(因为t是长度为21的向量),所以循环变量b实际是1到21的整数,完全不是你要的-10到10的目标值。

  2. 负数下标会导致R的赋值逻辑异常
    即使你改成直接遍历t的元素(for (b in t)),用like[b] <- LLF这种写法也会出错——R中负下标代表删除对应位置的元素,而不是赋值到该位置,最终会得到混乱的结果。

修正后的代码

推荐使用预分配向量+索引循环的方式,既高效又避免下标问题:

# 生成目标序列
t_seq <- seq(from = -10, to = 10, by = 1)
# 预分配结果向量,指定长度(比动态拼接更高效)
n <- length(t_seq)
like <- numeric(n)
pr <- numeric(n)

# 通过索引遍历序列
for (i in 1:n) {
  b <- t_seq[i]
  # 简化LLF计算:(1-1)=0,第二项无意义可直接省略
  LLF <- log(1 / (1 + exp(-b)))
  like[i] <- LLF
  pr[i] <- b 
}

# 查看结果
pr
df <- data.frame(like, pr)

如果偏好直接遍历元素,也可以用计数器记录位置:

t_seq <- seq(from = -10, to = 10, by = 1)
like <- c()
pr <- c()

for (b in t_seq) {
  LLF <- log(1 / (1 + exp(-b)))
  like <- c(like, LLF)
  pr <- c(pr, b)
}

pr
df <- data.frame(like, pr)

额外优化说明

原代码中(1-1)*log(...)这一项恒为0,可以直接省略,不影响LLF的计算结果,简化后代码更清晰。

内容的提问来源于stack exchange,提问作者Teevell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:00:58