library(tidyverse)それでは、ロジカル型の動作や特徴を少し細かくみていきましょうまず、ロジカル型は
TRUE[1] TRUE
FALSE[1] FALSE
str(TRUE) logi TRUE
str(FALSE) logi FALSE
TRUE FALSEと書くことでRにとっては特に指定したり関数で変換したりすることが必要なく、ロジカル型として認識されています。
短縮して、
T[1] TRUE
F[1] FALSE
と書くこともできます。逆に、TやFに何か値を代入するのは厳禁です。
このTRUE,FALSE,型変換をしてみると、
as.numeric(TRUE)[1] 1
as.character(TRUE)[1] "TRUE"
こんな感じでas.numericで変換するとTRUEは1as.characterで変換するとTRUEは”TRUE”になります。
この動作、因子型をおもいだしませんか?
v <- as.factor(c("dog","cat","dog"))
as.numeric(v)[1] 2 1 2
as.character(v)[1] "dog" "cat" "dog"
ただ、因子型と違うのは、
v + vWarning in Ops.factor(v, v): '+' not meaningful for factors
[1] NA NA NA
はエラーが起こりますが、
c(TRUE, TRUE, FALSE) + c(FALSE, TRUE, TRUE)[1] 1 2 1
Logical型はこのように計算ができてしまいます。
TRUE + TRUE[1] 2
TRUE + FALSE[1] 1
FALSE + FALSE[1] 0
ということでTRUEの正体は「1」で、FALSEの正体は「0」になります
Logical型への変換は、
as.logical("FALSE")[1] FALSE
as.logical("TRUE")[1] TRUE
as.logical(0)[1] FALSE
as.logical(1)[1] TRUE
でそれぞれFALSE、TRUEに変換できます。
尚、
as.logical("dog")[1] NA
as.logical(0.1)[1] TRUE
as.logical(2)[1] TRUE
as.logical(-5)[1] TRUE
as.logical(-3.2)[1] TRUE
文字列型の場合はTRUEやFALSE以外のものをロジカル型に変換しようとすると欠損、NA、が返されますが、数字を与えると、0以外がすべてTRUEと帰ってくるので「プログラム」を描く場合に注意しておく必要があります。