0

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

真正的目标。

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

任何帮助将不胜感激!

斯蒂金

4

4 回答 4

3

我们可以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循环,那么预先分配一个等于'M'中元素数量的a,循环遍历其中一个向量的序列,并根据索引将'M'和'N'的连接元素分配list给元素length和它listunlist

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"
于 2017-04-30T09:48:58.787 回答
0

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

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

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

于 2020-06-16T14:23:42.227 回答
0

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

for (i in textTags)
  addThisToThat(textTags[i], images[i])
于 2017-04-30T09:55:24.957 回答
0

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

于 2017-04-30T10:09:42.377 回答