R では、ベクターを操作する場合、ベクター全体をループ処理するよりも、ベクター全体を一度に処理することを好むことがよくあります (たとえば、このディスカッションを参照してください)。
ある意味では、R には "組み込み" のフィルター機能とリデュース機能 (ベクトルのサブセットを選択できる方法) があります。それらは R で非常に便利で、いくつかの方法があります。いくつか紹介しますが、R について読んだり、このようなサイトで他の人のコードを見たりすると、さらに多くのことを理解できるでしょう。?which
また、とも参照することを検討?'['
します。これには、ここで説明するよりも多くの例があります。
最初の方法は、必要な要素を選択するだけです。必要な要素のインデックスがわかっている場合は、これを使用できます。
x <- letters[1:10]
> x
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
最初の 5 文字だけが必要な場合は、次のように記述できます。
x[1:5]
x[c(1,2,3,4,5)] # a more explicit version of the above
マイナス記号を使用して、不要な要素を選択することもできます。次に例を示します。
x[-(6:10)]
要素を選択する別の方法は、ブール値ベクトルを使用することです。
x <- 1:5
selection <- c(FALSE, TRUE, FALSE, TRUE, FALSE)
x[selection] # only the second and fourth elements will remain
ベクトルを比較関数に入れることでそのようなベクトルを作成できるため、これは重要です。
selection <- (x > 3)
> selection
[1] FALSE FALSE FALSE TRUE TRUE
x[selection] # select all elements of x greater than 3
x[x > 3] # a shorthand version of the above
ここでも、使用する比較の反対を選択できます (これはブール値であるため、 を使用!
せず、 を使用することに注意してください-
)。
x[!(x > 3)] # select all elements less than or equal to 3
ベクトル比較を行いたい場合は、%in%
関数を検討する必要があります。例えば:
x <- letters[1:10]
> x %in% c("d", "p", "e", "f", "y")
[1] FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
# Select all elements of x that are also "d", "p", "e", "f", or "y"
x[x %in% c("d", "p", "e", "f", "y")]
# And to select everything not in that vector:
x[!(x %in% c("d", "p", "e", "f", "y"))]
上記はほんの一例です。私は間違いなくドキュメントをお勧めします。これは、すでに回答を受け入れた後の長い投稿であることは承知していますが、この種のことは非常に重要であり、理解することで、R を初めて使用する場合、将来的に多くの時間と労力を節約できるので、私は考えました私はあなたとそれを行ういくつかの方法を共有したいと思います.