簡體   English   中英

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循環,那么預先分配一個length等於'M'中元素數量的list ,循環遍歷其中一個向量的序列,並分配'M'和'N'的連接元素基於list元素的索引並將其unlist list

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"

在“真正的目標”中解釋的方式,“文本標簽”向量中的每個元素對應於“圖像向量”中的一個。 如果這是正確的,那么解決方案不是那么簡單(假設兩個向量具有相同的長度):

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

你知道lapply嗎? 在 purrr 包中,您可以找到它的等效項:map。 您還可以在那里找到 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)
})

請注意,如果您想在每個循環上打印一些內容,這將不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM