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

时间:2017-04-30 09:47:36

标签: r loops vector double pairwise

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 loops 双循环,我只能找到有关嵌套循环的信息。在我的任务中使用流命令并没有帮助我。

真正的目标。

我想在图像中添加一行文字。文本标签存储在单个矢量中,图像也是如此。到目前为止我的代码工作,除了以上面说明的成对方式调用向量的元素。有很多图片和生命太短,无法手工完成。

非常感谢任何帮助!

斯泰恩

4 个答案:

答案 0 :(得分:2)

我们可以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,其中list等于&#39; M&#39;中的元素数量,循环执行其中一个向量,并指定&#39; M&#39;的连接元素。和&#39; N&#39;基于unlist元素的索引和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"

的索引
{{1}}

答案 1 :(得分:0)

在“真实目标”中解释的方式,“文本标签”向量中的每个元素对应于“图像向量”中的一个元素。如果这是正确的,那么解决方案就不那么简单(假设两个向量具有相同的长度):

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

请注意,如果您想在每个循环上打印一些内容,则此操作无效。