成对循环遍历 R 中的多个向量

Pairwise loop through multiple vectors in R

我在 R 中有什么?

以下载体:

N <- c('a','b')
M <- c('x','y')

目标.

在保持向量完整的同时(我不希望将它们组合成矩阵),我想按以下成对方式调用向量的元素:

"a" "x" "b" "y"

到目前为止的代码

我试过使用 for 循环,但在下面的写法中,它被读取为嵌套的 for 循环:

for (i in M) for (j in N)  { 
 print(i)
 print(j)
}

这导致:

"a" "x" "a" "y" "b" "x" "b" "y"

我搜索的内容。

将搜索词用作多个索引for循环双循环,我只能找到有关嵌套循环的信息。使用流命令对我的探索没有帮助。

真正的目标。

我想在图片中添加一行文字。文本标签存储在单个向量中,图像也是如此。到目前为止,我的代码有效,除了以上面解释的成对方式调用向量的元素。有很多图片,生命太短暂,不能全部手工完成。

如有任何帮助,我们将不胜感激!

斯蒂恩

我们可以rbind向量然后连接

c(rbind(M, N))
#[1] "x" "a" "y" "b"

或者另一种选择是order基于vector

的顺序
c(M, N)[order(c(seq_along(M), seq_along(N)))]
#[1] "x" "a" "y" "b"

如果我们真的需要一个for循环,那么预分配一个list,其中length等于'M'中的元素个数,循环遍历一个的序列的向量,并根据索引将 'M' 和 'N' 的连接元素分配给 list 元素和 unlist it

l1 <- vector("list", length(M))
 for(i in seq_along(M)){
   l1[[i]] <- c(M[i], N[i])
 }
unlist(l1)
#[1] "x" "a" "y" "b"

"real goal" 中解释的方式,"textual tags" 向量中的每个元素对应于 "images vector" 中的一个元素。如果那是正确的,那么解决方案不是那么简单(假设两个向量具有相同的长度):

for (i in textTags)
  addThisToThat(textTags[i], images[i])

你知道lapply吗?在 purrr 包中,您可以找到它的等价物:地图。您还可以在那里找到 map_2,它同步循环两个向量。语法类似于 map_2(vec1, vec2, ~some_function_of(.x, .y))

对于有此问题的其他人,我建议使用基本 R 函数 mapply。与 for 循环不同,它会自动为每个循环定义变量 nm

mapply(N, M, function(n, m) {
   print(n)
   print(m)
})

请注意,如果您想在每个循环中打印一些东西,这将不起作用。