成对循环遍历 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
循环不同,它会自动为每个循环定义变量 n
和 m
。
mapply(N, M, function(n, m) {
print(n)
print(m)
})
请注意,如果您想在每个循环中打印一些东西,这将不起作用。
我在 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
循环不同,它会自动为每个循环定义变量 n
和 m
。
mapply(N, M, function(n, m) {
print(n)
print(m)
})
请注意,如果您想在每个循环中打印一些东西,这将不起作用。