Rで文字列を連結する

R
Published

August 23, 2024

Rで文字列を連結するには、paste関数を使用します。

基本的な使い方

paste("a", "b")
[1] "a b"

デフォルトでは、区切り文字は半角スペースです。 引数sepを変更することで、任意の文字に変更可能です。

paste("a", "b", sep = "&")
[1] "a&b"

3文字以上でも同様です。

paste("a", "b", "c",  sep = "&")
[1] "a&b&c"

ベクトル同士の連結も可能です。

x <- c("A", "B", "C")
y <- c("a", "b", "c")

paste(x, y)
[1] "A a" "B b" "C c"

長さが同じではない場合は、短いほうが再利用されます。

x <- c("A", "B", "C")
y <- c("a", "b")

paste(x, y)
[1] "A a" "B b" "C a"
paste("a", "b", collapse = "ba")
[1] "a b"

スペースなしで連結したい場合には、paste0が有効です。

paste0("a", "b")
[1] "ab"
# 下のコードと同じです
paste("a", "b", sep = "")
[1] "ab"

これらの関数の主な使い道は以下の2つになると思います。

  • ファイル名やプロットタイトルの指定
  • コンソール出力

例えば、プロットの保存の際、以下のように保存ディレクトリを指定できます。

filename <- "hoge"
savedir <- paste0("folder/", filename, ".pdf")
print(savedir)
[1] "folder/hoge.pdf"

また、繰り返し処理のときなどに、コンソールに出力して現在の状況を把握できます。

for (i in 1:5) {
    print(paste("i =", i))
}
[1] "i = 1"
[1] "i = 2"
[1] "i = 3"
[1] "i = 4"
[1] "i = 5"

よく使う関数だと思いますので、覚えておくと便利です。

発展編

基本的には上記の方法で事足りると思います。 以下では、やや踏み込んだ使い方を説明します。

出力結果を1つのベクトルにする

複数の長さからなるベクトルを連結した場合には、以下のように、長い方のベクトルと同じ長さの結果になります。

x <- c("A", "B", "C")
y <- c("a", "b", "c")
paste(x, y)
[1] "A a" "B b" "C c"

これをくっつけて1つのベクトルにするには、引数collapseを設定します。 デフォルトではcollapse = NULLです。

x <- c("A", "B", "C")
y <- c("a", "b", "c")
paste(x, y, collapse = "&")
[1] "A a&B b&C c"

使い所としては、単語をくっつけて文章にするときに有効かもしれません。

x <- c("I", "am", "John")
paste(x, collapse = " ")
[1] "I am John"

長さ0のベクトルが含まれる場合の挙動を変更する

使い所がよくわかりませんが、R 4.0.1からrecycle0引数が追加されました(参考)。

論理値(TRUEFALSE)で指定し、デフォルトではFALSEです。 TRUEにすると、連結する文字に長さ0のベクトル(NULL)が含まれる場合に戻り値(出力結果)が長さ0のベクトルになるようです。

paste("a", NULL, "b")
[1] "a  b"
paste("a", NULL, "b", recycle0 = TRUE)
character(0)

エラー処理などに使えるでしょうか? 私は使い道がよくわかりませんでした…

お試しスペース

お試しスペースを用意してみました。

Back to top