R语言初学者求助:for循环遍历向量仅返回单个值的问题
问题原因与解决方法
你的两段代码核心问题是没有收集符合条件的元素,只是在循环结束后输出了最后一次循环的变量值,所以只会返回向量最后一个符合条件的元素(也就是32)。
具体问题分析
- 第一段代码:
for (i in x)逐个遍历向量元素,遇到小于10的元素用next跳过,但循环过程中没有保存任何符合条件的元素,循环结束后i的值停留在向量最后一个元素32,所以print(i)只会输出这个值。 - 第二段代码:用索引遍历的逻辑和第一段完全一致,循环结束后
i是最后一个索引6,x[i]就是32,同样只输出最后一个元素。
修正后的for循环写法
要实现返回所有大于10的元素,需要先创建一个空向量来存储结果,循环中每遇到符合条件的元素就添加进去,最后返回这个结果向量:
直接遍历元素的版本
hi <- function(x) { # 初始化空向量存储结果 result <- c() for (i in x) { # 筛选大于10的元素,若要包含10则改为i >= 10 if (i > 10) { result <- c(result, i) } } return(result) } testvec1 <- c(2, 7, 10, 26, 18, 32) hi(testvec1)
按索引遍历的版本
fxn <- function(x) { result <- c() for (i in 1:length(x)) { if (x[i] > 10) { result <- c(result, x[i]) } } return(result) } fxn(testvec1)
额外提示(R风格写法)
在R中处理这类向量筛选,不需要用for循环,直接用向量操作更简洁高效:
testvec1[testvec1 > 10]
内容的提问来源于stack exchange,提问作者xin hwa
相关产品推荐
相关产品推荐

