R语言中遍历含负数的序列异常求助:如何获取-10到10的循环值?
问题分析与解决:R语言遍历负数序列出错
你的核心问题出在循环遍历的对象错误,以及后续下标赋值的逻辑问题:
错误点拆解
循环变量取的是序列索引而非实际值
你写的for (b in seq(t))中,seq(t)等价于1:length(t)(因为t是长度为21的向量),所以循环变量b实际是1到21的整数,完全不是你要的-10到10的目标值。负数下标会导致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
相关产品推荐
相关产品推荐

