同时在两个或多个向量上的R循环-平行

同时在两个或多个向量上的R循环-平行,r,loops,iteration,R,Loops,Iteration,我在寻找一种方法来同时迭代R中的两个或多个字符向量/列表。是否可以这样做: foo <- c('a','c','d') bar <- c('aa','cc','dd') for(i in o){ print(o[i], p[i]) } 在Python中,我们可以简单地执行以下操作: foo = ('a', 'c', 'd') bar = ('aa', 'cc', 'dd') for i, j in zip(foo, bar): print(i, j) 但是我们可以

我在寻找一种方法来同时迭代R中的两个或多个字符向量/列表。是否可以这样做:

foo <- c('a','c','d')
bar <- c('aa','cc','dd')

for(i in o){
  print(o[i], p[i])
}
在Python中,我们可以简单地执行以下操作:

foo = ('a', 'c', 'd')
bar = ('aa', 'cc', 'dd')

for i, j in zip(foo, bar):
    print(i, j)
但是我们可以在R中这样做吗?

像这样

foo <- c('a','c','d')
bar <- c('aa','cc','dd')

for (i in 1:length(foo)){
  print(c(foo[i],bar[i]))
}

[1] "a"  "aa"
[1] "c"  "cc"
[1] "d"  "dd"

foo在R中,您宁愿基于索引而不是直接基于向量进行迭代:

for (i in 1:(min(length(foo), length(bar)))){
     print(foo[i], bar[i])
}

另一个选项是使用
mapply
。这对打印没有多大意义,但我假设您有兴趣做这件事,因为它比
print

foo <- c('a','c','d')
bar <- c('aa','cc','dd')

invisible(
  mapply(function(f, b){ print(c(f, b))},
         foo, bar)
)

foo可能有人根据标题到达,很好地利用了这一点:

foo<-LETTERS[1:10]
bar<-LETTERS[1:3]
i = 0
for (j in 1:length(foo)){
  i = i + 1
  if (i > length(bar)){
    i = 1
  }
  print(paste(foo[j],bar[i]) )
}

[1] "A A"
[1] "B B"
[1] "C C"
[1] "D A"
[1] "E B"
[1] "F C"
[1] "G A"
[1] "H B"
[1] "I C"
[1] "J A"
foo<-LETTERS[1:10]
bar<-LETTERS[1:3]
i = 0
for (j in 1:length(foo)){
  i = i + 1
  if (i > length(bar)){
    i = 1
  }
  print(paste(foo[j],bar[i]) )
}

[1] "A A"
[1] "B B"
[1] "C C"
[1] "D A"
[1] "E B"
[1] "F C"
[1] "G A"
[1] "H B"
[1] "I C"
[1] "J A"
suppressWarnings(invisible(
  mapply(function(x, y){ 
         print(paste(x, y))},
         foo, bar)
))