文字列と文字列の連結は,言語によって異なる記号が演算子として使われているが,R では二項演算子ではなく paste 関数,paste0 関数が使われる。
> paste("asd", "poi", sep="")
[1] "asdpoi"
> paste0("asd", "poi")
[1] "asdpoi"
> paste0(123, "asd")
[1] "123asd"
> paste0(123, TRUE)
[1] "123TRUE"
> paste0(123, T)
[1] "123TRUE"
> paste0(TRUE, FALSE)
[1] "TRUEFALSE"
TRUE と FALSE を連結するなんてことは普通は考えないこと。
& 記号を文字列としての連結演算子と定義する。ただし,2 項ともに論理型の場合には本来の & 演算子として使うというような関数を書いてみる。
"&" を "|" に変えても同じように動く。お好きな方を。
"&" = function(e1, e2) {
if (is.logical(e1) && is.logical(e2)) {
base::"&"(e1, e2)
} else {
paste0(e1, e2)
}
}
> "abc" & "12345" & "あいうえお"
[1] "abc12345あいうえお"
> 123456 & "numeric"
[1] "123456numeric"
> 456 & 100
[1] "456100"
> 456 & 0
[1] "4560"
> TRUE & FALSE
[1] FALSE
> "123" & TRUE & "asd"
[1] "123TRUEasd"
> (1 == 1) & (2 != 3)
[1] TRUE