Type Coercion

Author

Takafumi KUBOTA

Published

September 24, 2024

Abstract

Type coercion in R refers to the automatic conversion of elements with different data types into a unified type when combined in a vector. R follows a specific data type hierarchy: character > numeric > integer > logical. This ensures that all elements in a vector have the same type. For example, when a logical (TRUE), numeric (17), and character (“twelve”) are combined, all elements are coerced into the character type. Similarly, logical values like TRUE and FALSE are converted to 1 and 0 when combined with numeric values. This process allows R to handle mixed-type data efficiently and consistently. Understanding type coercion is crucial for data manipulation, as it prevents unexpected type changes when processing vectors with diverse elements.

Keywords

Type coercion, Data type hierarchy, Vector in R


Type Coercionについて

1. Type Coercion(型の強制)とは?

Rでは、異なるデータ型の要素を1つのベクトルにまとめると、自動的に最も汎用的なデータ型に変換されるプロセスが発生します。このプロセスを型の強制(type coercion)と呼びます。Rの基本データ型には、論理値(logical)、整数(integer)、数値(numeric)、および文字列(character)があります。Rはこれらのデータ型を統一するために、データ型の「階層」に従って、より汎用的な型に強制変換します。この階層は次のようになります:

  1. 文字列(character)

  2. 数値(numeric, double)

  3. 整数(integer)

  4. 論理値(logical)

異なるデータ型を1つのベクトルに含めると、Rはこの階層に従い、データ型を自動的に変換します。

2. Type Coercionの具体例

以下に、RにおけるType Coercionの例を10個示します。

フルコード:

# 例1
c(TRUE, 17, "twelve")

# 例2
c(FALSE, 3.14)

# 例3
c(3L, 5.5)

# 例4
c(TRUE, 2L)

# 例5
c("apple", 4.5)

# 例6
c(NA, "missing")

# 例7
c(TRUE, 4L, 5.2, "number")

# 例8
c(1, 2L, 3.5)

# 例9
c(FALSE, "FALSE")

# 例10
c(3L, TRUE, "yes")

各コードの実行:

# 例1
c(TRUE, 17, "twelve")
[1] "TRUE"   "17"     "twelve"
# 例2
c(FALSE, 3.14)
[1] 0.00 3.14
# 例3
c(3L, 5.5)
[1] 3.0 5.5
# 例4
c(TRUE, 2L)
[1] 1 2
# 例5
c("apple", 4.5)
[1] "apple" "4.5"  
# 例6
c(NA, "missing")
[1] NA        "missing"
# 例7
c(TRUE, 4L, 5.2, "number")
[1] "TRUE"   "4"      "5.2"    "number"
# 例8
c(1, 2L, 3.5)
[1] 1.0 2.0 3.5
# 例9
c(FALSE, "FALSE")
[1] "FALSE" "FALSE"
# 例10
c(3L, TRUE, "yes")
[1] "3"    "TRUE" "yes" 

3. 各例の説明

例1: c(TRUE, 17, "twelve")

この例では、論理値(TRUE)、数値(17)、文字列("twelve")が含まれています。TRUE17は文字列型に強制変換され、すべての要素が文字列型になります。

例2: c(FALSE, 3.14)

論理値と数値の組み合わせです。論理値のFALSEは数値の0に変換され、結果として数値ベクトルになります。

例3: c(3L, 5.5)

整数(3L)と数値(5.5)の組み合わせです。整数は数値に変換され、結果は数値ベクトルです。

例4: c(TRUE, 2L)

論理値と整数の組み合わせです。論理値のTRUEは1に変換され、結果として整数ベクトルになります。

例5: c("apple", 4.5)

文字列と数値の組み合わせです。数値は文字列に変換され、結果として文字列ベクトルが返されます。

例6: c(NA, "missing")

欠損値(NA)と文字列の組み合わせです。NAは欠損値のまま文字列に扱われ、結果は文字列ベクトルになります。

例7: c(TRUE, 4L, 5.2, "number")

論理値、整数、数値、文字列の混在です。全ての要素が最も汎用的な型である文字列に強制変換されます。

例8: c(1, 2L, 3.5)

数値と整数の組み合わせです。整数は数値に変換され、結果は数値ベクトルになります。

例9: c(FALSE, "FALSE")

論理値と文字列の組み合わせです。論理値は文字列に変換され、結果として文字列ベクトルになります。

例10: c(3L, TRUE, "yes")

整数、論理値、文字列の混在です。最も汎用的な型である文字列にすべての要素が強制変換されます。

4. Type Coercionのまとめ

RのType Coercionは、異なるデータ型を一つのベクトルにまとめる際に、最も汎用的なデータ型に自動的に変換するプロセスです。一般的に、文字列型が最も汎用的であり、次に数値型、整数型、論理型の順に強制変換が行われます。型の強制により、Rでは異なる型を含むベクトルも統一的に扱うことができますが、必要に応じて明示的な型変換関数を使うこともできます。