[英]Pairwise loop through multiple vectors in 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
循環不同,它為每個循環自動定義變量n
和m
。
mapply(N, M, function(n, m) {
print(n)
print(m)
})
請注意,如果您想在每個循環上打印一些內容,這將不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.