$ 演算子は R のアトミック ベクトル エラーに対して無効です
R は、ベクトルの要素を抽出するさまざまな方法を提供します。 この記事では、この目的のための base R の機能について概説します。
注意すべき重要な点は、R の抽出演算子の 1つである $
がベクトルに対して機能しないことです。 これから始めて、利用可能なさまざまなオプションを見ていきます。
$ 演算子は原子ベクトルに対して無効です
R のエラー
$
演算子は、データ フレームの名前付き列またはリストの名前付き要素を抽出するために使用できますが、ベクターでは機能しません。 R はエラーを発生させます。
$
演算子には、数値インデックスではなく、名前が必要です。 そのため、要素に名前が付けられたベクトルを作成します。
コード例:
# Create a vector using c(). Assign names for its elements.
vr1 = c(a = "alpha", d = "delta", r = "rho", s = "sigma")
vr1
# Try to extract the second element.
vr1$d
出力:
> vr1$d
Error in vr1$d : $ operator is invalid for atomic vectors
R は、$
演算子が原子ベクトルに対して無効であることを示しています。
数値または文字列のベクトルは、すべての要素が同じ型であり、要素として別のベクトルを持つことができないため、アトミックと呼ばれます。
この例のような原子ベクトルの場合、R の他の機能を使用して要素を抽出する必要があります。
R の []
および [[]]
演算子
[]
および [[]]
演算子を使用して、ベクトルの要素を抽出できます。
[]
と[[]]
は位置インデックスまたは名前を使用できます。[]
は複数の要素を抽出できますが、[[]]
は 1つの要素しか抽出できません。[[]]
は名前を削除しますが、[]
は要素を抽出するときに名前を保持します。
コード例:
# Use [] with index number or name to extract a single element.
vr1[2]
vr1['d']
# Use [[]] with the index number of the name to extract a single element.
vr1[[2]]
vr1[['d']]
# Use [] to extract multiple elements. Use indices or names.
vr1[c(2,4)]
vr1[c('d', 's')]
出力:
> # Use [] with index number or name to extract a single element.
> vr1[2]
d
"delta"
> vr1['d']
d
"delta"
> # Use [[]] with index number of name to extract a single element.
> vr1[[2]]
[1] "delta"
> vr1[['d']]
[1] "delta"
> # Use [] to extract multiple elements. Use indices or names.
> vr1[c(2,4)]
d s
"delta" "sigma"
> vr1[c('d', 's')]
d s
"delta" "sigma"
getElement()
関数を使用する
抽出演算子に加えて、R はベクトルから要素を抽出する getElement()
関数も提供します。
getElement()
は、オプション exact = TRUE
を指定した [[]]
演算子に似ています。
- 名前またはインデックスを使用して選択できる要素は 1つだけです。
- 名前が削除されます。
コード例:
getElement(vr1, 'd')
getElement(vr1, 2)
出力:
> getElement(vr1, 'd')
[1] "delta"
> getElement(vr1, 2)
[1] "delta"
ベクトルをデータ フレームに変換し、$
演算子を使用する
$
演算子を使用してベクターから要素を抽出する場合は、まずベクターをデータ フレームに変換する必要があります。
コード例:
dfr1 = as.data.frame(vr1)
dfr1
出力:
> dfr1 = as.data.frame(vr1)
> dfr1
vr1
a alpha
d delta
r rho
s sigma
1 列 4 行のデータ フレームがあります。 ベクトルの名前が列名になりました。 要素名が行名になりました。
元のベクトルの要素を抽出するには、目的の行と列の名前を指定する必要があります。 すべての列の行名を指定することもできます。
コード例:
# Use names for row and column.
dfr1['d','vr1']
# Only name the row, and select all columns.
dfr1['d',]
出力:
> # Use names for row and column.
> dfr1['d','vr1']
[1] "delta"
> # Only name the row and select all columns.
> dfr1['d',]
[1] "delta"