【问题标题】:R loop over two or more vectors simultaneously - paralellR同时循环两个或多个向量 - 并行
【发布时间】: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 中做到这一点吗?

【问题讨论】:

    标签: r loops iteration


    【解决方案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"
          

          在向量长度相同的条件下工作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-04
            • 2019-04-28
            • 1970-01-01
            • 1970-01-01
            • 2020-04-24
            • 1970-01-01
            相关资源
            最近更新 更多