【问题标题】:For-Loop in For-Loop appears to skip iterations (r)For-Loop 中的 For-Loop 似乎跳过了迭代 (r)
【发布时间】:2019-04-11 21:06:01
【问题描述】:

我正在尝试在 for 循环中运行 for 循环,但是它的行为与我期望的不同。我希望它循环遍历“内”循环中的元素,然后切换到“外”循环中的下一个元素并重复。

例如

Letters = c('AA', 'BB', 'CC', 'DD')

for(i in 1:length(Letters)) {

  LetDup <- Letters

  for(i in 1:length(LetDup)) {

    Combined <- paste0(Letters[i], ' vs ', LetDup[i])

    print(Combined)

  }
}

我期待得到

AA vs AA
AA vs BB
AA vs CC
AA vs DD
BB vs AA 
BB vs BB
.....

我如何表明这是我想要的,如果有人可以对我实际要求它做的事情提供一个简单的解释,那也会有所帮助。

【问题讨论】:

  • 试试do.call(paste, c(expand.grid(Letters, Letters), sep= " vs "))
  • 也只是一些笔记。即使您采用循环方法,也不需要制作 LetDup。不过,您确实需要为两个循环使用不同的索引。目前,您使用 i 来索引两个循环。
  • 通过在两个循环中使用相同的变量 i,您将始终使用第二个/内部 i 的值。 R 无法判断您何时需要外部 i 和内部 i。

标签: r for-loop


【解决方案1】:

如果您坚持使用循环,请采纳@Dason 的评论并执行以下操作:

for(i in 1:length(Letters)) {
  for(j in 1:length(Letters)) {
    Combined <- paste0(Letters[i], ' vs ', Letters[j])
    print(Combined)
    }
}

【讨论】:

    【解决方案2】:

    我们可以使用expand.gridCJ(来自data.table)然后执行paste

    library(data.table)
    CJ(Letters, Letters)[, paste(V1, 'vs', V2)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      相关资源
      最近更新 更多