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 loops、およびdouble loopsとして検索用語を使用すると、ネストされたループに関する情報しか見つけることができませんでした。フロー コマンドを使用しても、私の探求には役に立ちませんでした。

本当の目標。

画像に 1 行のテキストを追加したいと考えています。テキストタグは単一のベクトルに保存され、画像も保存されます。上記で説明したペアごとの方法でベクトルの要素を呼び出すことを除いて、これまでのコードは機能します。たくさんの写真がありますが、すべてを手作業で行うには人生は短すぎます。

どんな助けでも大歓迎です!

ステイン

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"

本当にループが必要な場合は、「M」の要素数に等しい aをfor事前に割り当て、ベクトルの 1 つのシーケンスをループし、インデックスに基づいて「M」と「N」の連結要素を割り当てます要素とそれlistlengthlistunlist

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

ラップリーを知っていますか?purrr パッケージでは、同等のものを見つけることができます: map. そこには、2 つのベクトルを同時にループする map_2 もあります。構文は map_2(vec1, vec2, ~some_function_of(.x, .y)) のようなものです

于 2017-04-30T10:09:42.377 に答える
0

この質問を持つ他の人には、 base R function を使用することをお勧めしますmapply。ループとは異なり、ループごとにfor変数nとfor を自動的に定義します。m

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

各ループで何かを印刷したい場合、これは機能しないことに注意してください。

于 2020-06-16T14:23:42.227 に答える