R语言中向量v存在有效长度但v[i]返回length为0的问题求助
R语言中向量v存在有效长度但v[i]返回length为0的问题求助
嗨,同学!我来帮你把这个问题掰明白~
首先,你遇到的length(v[i]) = 0和报错的核心原因是:R语言的向量索引是从1开始的!你一开始把i设为0,那v[i]其实就是v[0],这在R里属于无效索引,会直接返回一个长度为0的空对象,自然没法进行v[i] < 100的判断,所以才会抛出“argument is of length zero”的错误。
咱们再拆解下你原来的代码逻辑:
- 初始
v <- 0,这是一个长度为1的向量,没问题; - 但
i初始是0,第一次进入while循环的判断条件时,调用的是v[0],这就触发了无效索引的问题,直接报错终止了。
给你两种解决思路:
1. 修正你的循环逻辑
调整初始值和判断条件,避开无效索引的问题:
v <- c() # 先初始化一个空向量 i <- 1 current_num <- 3 * i while(current_num < 100) { v[i] <- current_num i <- i + 1 current_num <- 3 * i } v # 输出结果就是所有小于100的3的倍数
2. 更简洁的R风格写法
其实在R里生成这种序列根本不用写循环,用seq()函数一行就能搞定:
v <- seq(3, 99, by = 3)
这个函数的意思是:生成从3开始,步长为3,到99结束的序列(因为99是小于100的最大3的倍数)。
最后再补充下你测试时的疑问:length(v)是1是因为你初始给v赋值了0,它的长度确实是1,但v[0]是无效索引,所以返回空对象,长度就是0啦~
备注:内容来源于stack exchange,提问作者Czarian
相关产品推荐
相关产品推荐

