为何R语言中创建的vector首元素为空?新手编程求助
问题原因与解决方案
嘿,我来帮你揪出这个问题的根源,再给你更地道的R写法!
为什么会出现NA和多一个元素?
- 初始化的坑:你一开始把
badmonths定义成了c(''),这是一个字符型向量,而且已经自带了一个空字符串元素。后面用rbind往里面加数值时,R会自动把所有元素转成字符型(因为字符型的优先级更高),最后你用as.numeric()转换时,那个空字符串就变成了NA——这就是结果里第一个元素是NA的原因。 - 循环操作的问题:
rbind是用来合并矩阵或数据框的,用它处理向量完全没必要。更关键的是,初始的空字符串已经占了一个位置,后面每找到一个符合条件的元素就加一个,最后自然会比你想要的6个多1个(初始空+6个有效元素=7个)。
修正方案1:改进你的循环写法
首先,别用mean当变量名!这会覆盖R的内置mean()函数,以后再用这个函数就会出问题。然后把badmonths初始化为空的数值型向量,循环里用c()添加元素:
# 用mean_val代替mean,避免覆盖内置函数 mean_val <- mean(profitaftertax) # 初始化空的数值型向量 badmonths <- numeric(0) for(i in profitaftertax) { if (i < mean_val) { badmonths <- c(badmonths, i) } } print(badmonths)
修正方案2:用R的向量化操作(更推荐!)
R的核心优势就是向量化操作,这种筛选需求根本不需要写循环,一行代码就能搞定,效率更高也更简洁:
mean_val <- mean(profitaftertax) # 直接用逻辑索引筛选符合条件的元素 badmonths <- profitaftertax[profitaftertax < mean_val] print(badmonths)
这个写法会自动帮你筛选出所有小于均值的元素,生成刚好长度的向量,不会有多余的NA,也不用手动循环~
内容的提问来源于stack exchange,提问作者Irina Kärkkänen
相关产品推荐
相关产品推荐

