在for中使用2个变量进行r-迭代

在for中使用2个变量进行r-迭代,r,for-loop,R,For Loop,在R中是否有一个构造,我们可以在R中同时使用两个变量进行迭代?这样, for(i in list1 and j in list2) list1和list2可以是任意可编辑的。如果for循环的内容可以作为某种函数写入,则可以使用mapply a <- 1:10 b <- LETTERS[1:10] a [1] 1 2 3 4 5 6 7 8 9 10 b [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" mapply(pas

在R中是否有一个构造,我们可以在R中同时使用两个变量进行迭代?这样,

for(i in list1 and j in list2)

list1和list2可以是任意可编辑的。

如果for循环的内容可以作为某种函数写入,则可以使用
mapply

a <- 1:10
b <- LETTERS[1:10]

a
[1]  1  2  3  4  5  6  7  8  9 10
b
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"

mapply(paste, a, b)
[1] "1 A"  "2 B"  "3 C"  "4 D"  "5 E"  "6 F"  "7 G"  "8 H"  "9 I"  "10 J"

a通常,最好使用一个索引(作为引用列表中元素(变量)的索引)来迭代多个变量(相同长度):

var_list <- list(
  var1 = 1:10,          # 1, ..., 10
  var2 = letters[17:26] # q, ..., z
)

for (i in 1:length(var_list$var1)) {

  # Process each of var1 and var2
  print(paste(
    'var1:', var_list$var1[i],
    '; var2:', var_list$var2[i]
  ))

}

var\u list还有foreach包:

library(foreach)
foreach(i = letters, j = LETTERS) %do% {
  paste(i,j)
}

[[1]]
[1] "a A"

[[2]]
[1] "b B"

[[3]]
[1] "c C"
etc...

这还具有易于并行化的优点:只需将%do%更改为%dopar%,一个并行后端和rock and roll。

@DatamineR我认为OP不想迭代list1和list2的所有组合,而是同时迭代两个长度相同的列表(每个列表的第一个、第二个等)@DavidRobinson正确地理解了这个问题。这个构造在R中不存在(例如,它在Python中不存在,在zip(list1,list2)中i,j使用
。你可以迭代一个索引(
,在seq_中使用
)(list1){实际上,我的两个iteravles是一个带有随机数和文件名列表的数字向量。它们的长度相等,我需要同时访问它们。@Davidrobinsonth这是我在R中看到的最接近Python中zip()构造的。