R のデータ型と例

⚡ スマートサマリー

Rにおけるデータ型は、値がメモリにどのように格納されるかを定義し、演算子はRがそれらの値に対してどのような操作を行うかを決定します。ここでは、ベクトル、変数、算術演算子、関係演算子、論理演算子、代入演算子について、実行可能な例を交えて解説します。

  • 🔘 AtomICの種類: Rは、すべての値を論理値、整数値、倍精度浮動小数点数、複素数、文字値、または生データとして格納します。
  • ☑️ 型チェック: class()、typeof()、mode()は、値を3つの異なる角度から記述します。
  • ベクトル: c() 関数は、すべての要素が同じ型を共有する一次元コレクションを構築します。
  • 🧪 Operators: 算術演算子、関係演算子、論理演算子、および代入演算子は、Rの基本式のほぼすべてを網羅しています。
  • 🛠️ サブセット化: 角括弧と論理条件を組み合わせることで、ベクトル要素を1行にまとめてフィルタリングできます。
  • ⚠️ バージョンノート: R 4.3.0 では、&& または || の引数の長さが 1 より大きい場合、エラーとして扱われるようになりました。

Rのデータ型

R のデータ型とは何ですか?

R プログラミングにおけるデータ型またはデータ構造は次のとおりです。

そのリストは関連する2つのアイデアを混在させているため、それらを分離することで、このページの残りの部分を理解しやすくなります。 データ・タイプ 単一の値が何であるかを説明します。数値、テキスト、TRUEまたはFALSEなどです。 データ構造 いくつの値がどのような形でまとめられているかを示します。スカラー、ベクトル、行列、データフレーム、リストは構造体であり、それらの内部の値はRの基本型のいずれかに属します。

Structure 寸法 複数の種類を混ぜても良いですか? 典型的な使用
スカラー 長さ1のベクトル いいえ 単一の測定値またはフラグ
ベクトル 1 いいえ 1種類の読み物の列
マトリックス 2 いいえ 数値グリッドと線形代数
データフレーム 2 はい、列ごとに1つのタイプ 表形式データセット
リスト 1つだが、入れ子式 はい、要素ごとに何でも モデルの結果と混合容器

Rには独立したスカラー型はありません。スカラーとは単に長さ1のベクトルであり、そのためRのコードの多くはベクトル全体を一度に扱うように記述されています。

Rにおける基本的なデータ型

Rにおけるすべての値は、少数の基本型(原子型)のいずれかに属します。

  • 4.5は、数値と呼ばれる小数値です。
  • 4は整数に見えますが、Rは依然としてそれをdouble型として格納します。真の整数が必要な場合は、4Lと記述してください。
  • TRUE または FALSE はブール値であり、R では論理値と呼ばれます。
  • ” ” または ' ' の内側の値はテキスト(文字列)です。これらの値は文字と呼ばれます。

さらに2つの型がこのセットを完成させます。3+2iのような複素数値は実部と虚部を持ち、生の値はバイトを持ちます。どちらも日常的な分析ではめったに現れませんが、基本Rには記載されています。 typeof() のドキュメント 一般的な4つのタイプに加えて。

タイプ 例の値 class() は、 typeof() は、
論理的 TRUE 論理的な 論理的な
整数 4L 整数 整数
Double (数値) 4.5 数値の
人格 「Rは素晴らしい」 文字 文字
複雑な 3 + 2i 複雑な 複雑な
Raw as.raw(10)

クラス関数を使えば、変数の型を確認できます。

例1:数値変数をチェックする

# Declare variables of different types
# Numeric
x <- 28
class(x)

出力:

## [1] "numeric"

例2:文字変数をチェックする

# String
y <- "R is Fantastic"
class(y)

出力:

## [1] "character"

例3:論理変数のチェック

# Boolean
z <- TRUE
class(z)

出力:

## [1] "logical"

28には小数点以下の部分がないにもかかわらず、class() は 28 に対して「numeric」と答えることに注意してください。R は 28 を double 型として格納しており、typeof() でのみそれがわかります。次に学ぶべき重要な違いは、これらの値がどのように名前付けされるかです。

Rの変数

変数は、Rにおける基本的な構成要素の一つであり、値を格納する役割を果たします。データサイエンスに携わるすべての人にとって、変数は重要な存在です。Rの変数には、数値、オブジェクト、統計結果、ベクトル、データセット、モデル予測など、Rが出力するあらゆるものを格納できます。変数の名前を呼び出すだけで、後からその変数を使用できます。

Rで変数を宣言するには、変数名を指定する必要があります。変数名にはスペースを含めてはいけません。アンダースコア(_)を使って2つの単語をつなげることができます。

名前には文字、数字、ドット、アンダースコアを含めることができますが、必ず文字またはドットで始まる必要があり、TRUE、FALSE、NULLなどの予約語は名前として使用できません。変数に値を追加するには、<- または = を使用します。

構文は次のとおりです。

# First way to declare a variable:  use the `<-`
name_of_variable <- value
# Second way to declare a variable:  use the `=`
name_of_variable = value

コマンドラインで次のコードを記述すると、何が起こるか確認できます。

例1:値を割り当てて出力する

# Print variable x
x <- 42
x

出力:

## [1] 42

例2:2つ目の変数を宣言する

y  <- 10
y

出力:

## [1] 10

例3:1つの式で2つの変数を使用する

# We call x and y and apply a subtraction
x-y

出力:

## [1] 32

同じ型の複数の値を保持する変数はベクトルと呼ばれ、これはほとんどすべてのR関数が期待する構造です。

Rにおけるベクトル

ベクトルとは、すべての要素が同じ型を持つ一次元コレクションです。以前に学習したすべての基本的なRデータ型を使用してベクトルを作成できます。Rでベクトルを作成する最も簡単な方法は、c()関数を使用することです。

例1:数値ベクトルを作成する

# Numerical
vec_num <- c(1, 10, 49)
vec_num

出力:

## [1]  1 10 49

例2:文字ベクトルを作成する

# Character 
vec_chr <- c("a", "b", "c")
vec_chr

出力:

## [1] "a" "b" "c"

例3:論理ベクトルを作成する

# Boolean 
vec_bool <-  c(TRUE, FALSE, TRUE)
vec_bool

出力:

##[1] TRUE FALSE TRUE

c() に様々な型のデータが混在していても、エラーにはなりません。存在する最も一般的な型まで全ての要素を静かに強制変換するため、c(1, "a", TRUE) は文字ベクトルになります。R ではベクトルに対して算術計算を行うこともできます。

例4:2つのベクトルを要素ごとに加算する

# Create the vectors
vect_1 <- c(1, 3, 5)
vect_2 <- c(2, 4, 6)
# Take the sum of A_vector and B_vector
sum_vect <- vect_1 + vect_2
# Print out total_vector
sum_vect

出力:

[1]  3  7 11

両方のベクトルの長さが同じであるため、加算は要素ごとに実行されます。長さが異なる場合、Rは短い方のベクトルを再利用し、長い方のベクトルと一致するまで繰り返します。そして、長い方の長さが短い方の長さの倍数でない場合にのみ警告を発します。

例5:最初の5つの要素をスライスする

Rでは、ベクトルをスライスすることができます。場合によっては、ベクトルの最初の5つの要素だけに関心があることがあります。[1:5]コマンドを使用すると、trac1から5までの値をtに代入してください。

# Slice the first five rows of the vector
slice_vector <- c(1,2,3,4,5,6,7,8,9,10)
slice_vector[1:5]

出力:

## [1] 1 2 3 4 5

例6:コロンを使って範囲を作成する Operaタ

値の範囲を作成する最も簡単な方法は、2つの数値の間にコロン演算子(:)を使用することです。たとえば、上記の例では、c(1:10)と記述することで、1から10までの値のベクトルを作成できます。

# Faster way to create adjacent values
c(1:10)

出力:

## [1]  1  2  3  4  5  6  7  8  9 10

ベクトルは混合されると暗黙のうちに型が変わるため、必要に応じて型を検査および変換する方法を知っておくことが重要です。

Rでデータ型をチェックおよび変換する方法

3つの関数群は、常に生じる3つの疑問、すなわち「これは何なのか」「これは特定の型なのか」「これは別の型になり得るのか」に答えるものです。

機能ファミリー 質問に答える
クラス()、タイプ()、モード() この値の型は何ですか? クラス(28)、タイプ(28)、モード(28)
は。*() この値は型Xですか? is.numeric()、is.character()、is.logical()
として。*() この値はタイプXにできますか? as.numeric()、as.character()、as.integer()
str() この物体は全体的にどのような外観をしていますか? str(vec_num)
# Three different views of the same value
x <- 28
class(x)      # "numeric"  -- the class used for method dispatch
typeof(x)     # "double"   -- how R stores the value internally
mode(x)       # "numeric"  -- the older S-style mode

# Ask a yes/no question about a type
is.numeric(x)     # TRUE
is.character(x)   # FALSE

# Convert between types
as.character(x)   # "28"
as.integer("28")  # 28 stored as an integer
as.numeric("abc") # NA, with a coercion warning

ここで起こるほとんどの驚きは、2つのルールで説明できます。まず、class() はメソッドディスパッチに使用されるクラスを報告し、typeof() は内部ストレージを報告するため、28 は一方では「numeric」、他方では「double」となります。次に、変換が成功しない場合でもスクリプトは停止しません。as.numeric("abc") は NA を返し、型変換の警告を出力します。したがって、インポート後にサイレント NA が発生する場合は、ほぼ常に型の問題です。同じロジックが次の処理にも適用されます。 要因これらは、カテゴリを整数コードとレベルの表として格納します。

型が確定したので、次はそれらを操作する演算子について検討します。

R算術 Operaトー

まず、Rにおける基本的な算術演算子を見ていきましょう。以下は、Rプログラミングにおける算術演算子とその意味です。

Operator 詳細説明
+ 追加
サブtrac生産
* 乗算
/ ディビジョン
^ または ** 累乗
%% モジュロ(除算後の余り)
%/% 整数除算(商を求め、余りは捨てる)

これらの演算子はすべてベクトル化されているため、同じ式を単一の値に対しても、列全体に対しても使用できます。

例1:足し算

# An addition
3 + 4

出力:

## [1] 7

上記のRコードを簡単にコピー&ペーストして Rstudio コンソール。この記事では、出力は ## で始まる行に表示されます。たとえば、print(" というコードを書くとGuru99") コンソールには [1] " と表示されますGuru99」、このページでは ## [1] " と表示されますGuru99」。

## は出力行を示し、角括弧 ([1]) 内の数字はその行の最初の値のインデックスであり、結果の一部ではありません。

#で始まる文はコメントです。Rスクリプト内で#を使うと、任意の注釈を追加できます。Rは実行時にそれを無視します。

例2:掛け算

# A multiplication
3*5

出力:

## [1] 15

例3:割り算

# A division
(5+5)/2

出力:

## [1] 5

例4:指数計算

# Exponentiation
2^5

出力:

## [1] 32

例5:モジュロ

# Modulo
28%%6

出力:

## [1] 4

算術演算は数値を生成します。次の演算子群は、代わりにTRUEとFALSEを生成します。

R関係(比較) Operaトー

関係演算子は2つの値を比較し、論理的な結果を返します。これらはフィルタリングに使用される条件を構築する演算子であり、算術演算子とまったく同じ方法でベクトル化されます。

Operator 詳細説明
> 越える
< Less より
>= 以上
<= Less 以上
== ちょうど
!= 等しくない
a <- 10
b <- 3

a > b     # TRUE
a < b     # FALSE
a >= 10   # TRUE
a <= 3    # FALSE
a == b    # FALSE
a != b    # TRUE

# Relational operators are vectorised
scores <- c(45, 78, 90, 62)
scores >= 60   # FALSE TRUE TRUE TRUE

ここでは2つの習慣が時間を節約します。比較には == を、代入には <- を使用してください。条件式の中に単一の = を入れるのは、初心者によくある間違いです。また、double 型に対して == を使用することは避けてください。浮動小数点数の丸め処理により、0.1 + 0.2 == 0.3 は FALSE となるため、isTRUE(all.equal(0.1 + 0.2, 0.3)) が安全なテストです。 ソートされたデータフレーム 同じルールに従う。

R論理 Operaトー

論理演算子を使用すると、論理条件に基づいてベクトル内の値を返すことができます。以下の表は、Rで使用できる論理演算子の一覧です。

R言語における論理演算子と関係演算子の意味をまとめた参照表

R言語における論理式は[]で囲まれます。条件式はいくつでも追加できますが、括弧で囲む必要があります。条件式を作成するには、以下の構造に従います。

variable_name[(conditional_statement)]

`variable_name` はステートメントで使用する変数を指し、`variable_name > 0` のように論理式を作成します。最後に、角括弧を使用して論理式を確定します。以下に論理式の例を示します。

例1:ベクトルのすべての要素を比較する

# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5

出力:

## [1]FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

上記の出力では、Rは各値を読み込み、それを「logical_vector>5」という条件と比較します。値が厳密に5より大きい場合は条件はTRUEとなり、そうでない場合はFALSEとなります。RはTRUEとFALSEのベクトルを返します。

例2:一致する要素のみを保持する

以下の例では、tract は、「厳密に 5 より大きい」という条件を満たす値のみを抽出します。そのためには、値を含むベクトルの前に角括弧で条件を囲みます。

# Print value strictly above 5
logical_vector[(logical_vector>5)]

出力:

## [1]  6  7  8  9 10

例3:2つの条件を組み合わせる

# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]

出力:

## [1] 5 6

例3では、意図的に単一のアンパサンド&を使用しています。単一文字の演算子&と|は、ベクトルを要素ごとに比較し、ベクトルを返します。これは、部分集合化に必要なものです。二重形式の&&と||は1つの値を返し、if()およびwhile()条件に属します。 R 4.3.0引数が 1 つの要素より長い場合、&& または || に渡すと警告ではなくエラーになるため、これら 2 つの演算子ファミリーは互換性がなくなりました。! 演算子は条件を否定し、xor() は排他的 OR を返します。

R課題 Operaトー

代入演算子は値を名前にバインドします。R はほとんどの言語よりも多くの代入演算子を提供しており、コードが 機能.

Operator 詳細説明
<- 左代入、R言語における慣用的な選択肢
= 左代入だが、通常は関数の引数用に予約されている。
-> 正しい割り当て、有効だがめったに使われない
<<- 囲んでいる環境を検索するスーパーアサインメント
->> 適切な上位割り当て
# Left assignment -- the idiomatic form
count <- 5

# Equals sign: works, but reserve it for function arguments
count = 5
round(3.14159, digits = 2)

# Right assignment
5 -> count

# Superassignment, used inside functions to reach an outer scope
count <<- 5

スタイルガイドでは、オブジェクトの作成には <- を、呼び出し内の引数の命名には = を使用することを推奨しています。これは、2 つの役割が視覚的に区別されるためです。 <<- は控えめに使用してください。現在の関数外のオブジェクトを変更し、コードの理解を困難にします。代入と型に慣れたら、次のステップに進みます。 実際のデータをインポートする そしてレシャping それで dplyr; ザ・ R言語の概要 ツールチェーン全体を文脈に沿って理解できるようにする。

よくあるご質問

ベクトルは単一の型の要素のみを保持し、型を混在させると強制的な型変換が発生します。リストは各スロットに他のリスト、データフレーム、関数など、あらゆるものを保持できます。そのため、モデルオブジェクトはリストになります。

長さの異なる 2 つのベクトルが演算子に遭遇すると、R は長さが一致するまで短い方のベクトルを繰り返します。c(1,2,3,4) + c(1,2) は 2 4 4 6 になります。長い方の長さが倍数でない場合にのみ警告が表示されます。

NAはベクトル内の欠損値を表します。NULLはオブジェクトの不在を表し、長さはゼロです。NaNは0/0のように未定義の数値結果です。Infは1/0のようにゼロ除算を表します。

%in% 演算子はメンバーシップをテストし、右側のベクトルに見つかった左側の各要素に対して TRUE を返します。 c(2,7) %in% c(1,2,3) は TRUE FALSE を返します。これは、長い == 比較の連鎖を | で結合します。

選択する マトリックス 数値グリッドと線形代数の場合、 データフレーム 列の型が異なるテーブルの場合、 リスト 要素の形状が異なる場合。

R 4.1.0 で導入された |> は、左側の値を右側の関数の最初の引数に渡します。magrittr の %>% パイプとは異なり、呼び出しをネストすることなくステップを連結でき、パッケージも必要ありません。

AIアシスタントは、型の不一致を指摘し、as.*変換を提案し、行のサンプルから再コーディングコードをドラフトします。また、特徴量エンジニアリングのステップを提案します。 機械学習 モデルが適合しました。生成されたコードは必ずご自身のデータと照らし合わせて確認してください。

はい。RStudio 2023.09.0以降では GitHubコパイロット R式をインラインで補完する統合機能です。Copilotのサブスクリプションが必要で、管理者はRStudio ServerまたはPosit Workbenchでこの機能を有効にする必要があります。