如何在R语言的For循环中迭代多个变量
在R中同时迭代两个向量的for循环实现方法
你的代码存在两处问题:
- R的for循环语法不支持
for (n in num, n2 in names)这种多变量同时迭代的写法 - R里不能直接用
print("%s : %i",n2,n)做格式化输出,需要搭配sprintf函数,或者使用cat
给你几种可行的实现方式:
方法一:通过索引循环
这是最基础的实现方式,利用向量的索引来同时获取对应位置的元素:
num <- c(1,2,3) names <- c('one','two','three') for(i in seq_along(num)) { n <- num[i] n2 <- names[i] print(sprintf("%s : %i", n2, n)) }
seq_along(num)会生成和num长度一致的索引序列(这里就是1、2、3),通过索引i就能分别取到两个向量对应位置的元素。
方法二:使用purrr包的walk2函数
如果你习惯tidyverse的风格,可以用purrr包的walk2函数,它专门用来对两个长度相同的向量做逐元素操作:
library(purrr) num <- c(1,2,3) names <- c('one','two','three') walk2(names, num, ~print(sprintf("%s : %i", .x, .y)))
其中.x对应第一个输入向量(names)的元素,.y对应第二个输入向量(num)的元素。
方法三:合并成数据框后循环行
把两个向量合并成数据框,通过循环数据框的行来实现:
num <- c(1,2,3) names <- c('one','two','three') df <- data.frame(names_col = names, num_col = num) for(i in 1:nrow(df)) { current_row <- df[i, ] print(sprintf("%s : %i", current_row$names_col, current_row$num_col)) }
这里给列名重新命名是为了避免和内置的names函数冲突,避免不必要的错误。
内容的提问来源于stack exchange,提问作者edge selcuk
相关产品推荐
相关产品推荐

