我正在寻找方法来同时迭代R中的两个或更多个字符向量/列表。这是做某些事情的某种方式:
foo <- c('a','c','d')
bar <- c('aa','cc','dd')
for(i in o){
print(o[i], p[i])
}
期望的结果:
'a', 'aa'
'c', 'cc'
'd', 'dd'
在Python中,我们可以做到:
foo = ('a', 'c', 'd')
bar = ('aa', 'cc', 'dd')
for i, j in zip(foo, bar):
print(i, j)
但我们可以在R吗?
这样做答案 0 :(得分:2)
喜欢这个吗?
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"
在矢量长度相同的情况下工作。
答案 1 :(得分:2)
在R中,您宁愿基于索引迭代而不是直接迭代:
for (i in 1:(min(length(foo), length(bar)))){
print(foo[i], bar[i])
}
答案 2 :(得分:2)
另一种选择是使用mapply
。这对打印没有多大意义,但我假设您有兴趣为比print
foo <- c('a','c','d')
bar <- c('aa','cc','dd')
invisible(
mapply(function(f, b){ print(c(f, b))},
foo, bar)
)
答案 3 :(得分:1)
也许有人根据标题到达了这个地方:
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"
“等同于” :(使用for
使分配变得容易)
suppressWarnings(invisible(
mapply(function(x, y){
print(paste(x, y))},
foo, bar)
))