R语言向量循环问题:如何获取指定顺序的向量输出?
解决你的R语言向量排序问题
Hey there! Let's break down why your current code isn't giving you the expected output, and fix it step by step.
为什么原来的代码不对?
你的循环逻辑是 h[i] <- f[i] —— 这相当于把f的第i个元素放到h的第i个位置上。比如:
- 第一次循环
i=3,你把f[3](也就是"c")放到h[3] - 第二次循环
i=2,把f[2]("b")放到h[2] - 以此类推,最后
h的每个位置都被填充成f对应位置的元素,自然结果和f完全一样。
两种解决方案
方法1:直接用向量索引(R的最优写法)
R的向量操作非常灵活,完全不需要写循环就能实现你要的效果。直接用你的索引向量去提取f的元素即可:
f <- c("a","b","c","d") h <- f[c(3,2,4,1)] h # 运行结果:[1] "c" "b" "d" "a"
这种写法不仅简洁,处理大数据时效率也比循环高很多,是R里的惯用方式。
方法2:如果一定要用循环实现
如果你想保留循环的写法,需要调整赋值逻辑:不要把元素放到h的第i个位置,而是按循环顺序依次填充h的位置。比如:
f <- c("a","b","c","d") h <- c() # 先把索引存起来,方便循环遍历位置 idx_list <- c(3,2,4,1) for(pos in 1:length(idx_list)){ h[pos] <- f[idx_list[pos]] } h # 运行结果:[1] "c" "b" "d" "a"
或者用append函数每次把元素追加到h的末尾:
f <- c("a","b","c","d") h <- c() for(i in c(3,2,4,1)){ h <- append(h, f[i]) } h # 运行结果:[1] "c" "b" "d" "a"
不过要注意,循环写法在处理大规模数据时效率会比向量索引低,所以优先推荐方法1。
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

