R中是否有一个结构,我们可以同时在R中使用两个变量进行迭代?像这样
for(i in list1 and j in list2)
Run Code Online (Sandbox Code Playgroud)
list1和list2可以是任何可迭代的。
If the contents of your for loop can be written as some kind of a function then you can use 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"
Run Code Online (Sandbox Code Playgroud)
Sure you will have to replace "paste" with a function that takes 2 elements (one from each list) as input. Also using more than 2 lists/vectors is ok.
还有 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...
Run Code Online (Sandbox Code Playgroud)
这还具有易于并行化的优点:只需将 %do% 更改为 %dopar%,注册一个并行后端,然后摇滚。
通常,迭代多个变量(相同长度)最好使用单个索引来实现,该索引充当引用列表中元素(变量)的索引:
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]
))
}
Run Code Online (Sandbox Code Playgroud)