R同时循环两个或多个向量 - 并行
Posted
技术标签:
【中文标题】R同时循环两个或多个向量 - 并行【英文标题】:R loop over two or more vectors simultaneously - paralell 【发布时间】:2018-04-05 03:53:50 【问题描述】:我一直在寻找在 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 中做到这一点吗?
【问题讨论】:
【参考方案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)
))
【讨论】:
【参考方案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】:在 R 中,您宁愿根据索引进行迭代,也不愿直接根据向量进行迭代:
for (i in 1:(min(length(foo), length(bar))))
print(foo[i], bar[i])
【讨论】:
【参考方案4】:像这样?
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"
在向量长度相同的条件下工作。
【讨论】:
以上是关于R同时循环两个或多个向量 - 并行的主要内容,如果未能解决你的问题,请参考以下文章