R Academy · レッスン

名前付きベクトルと名前付きシーケンス

ベクトルに名前を割り当ててアクセスし、読みやすいコードを書きます。

レッスン 4/413 ステップ

「名前付きベクトルと名前付きシーケンス」はCoddyKit上の無料R Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

名前付きベクトルの概要

名前付きベクトルとは、各要素に対応する名前(character ラベル)が付いたベクトルです。名前を付けるとコードが読みやすくなり、位置インデックスではなく名前で要素にアクセスできます。

# A plain vector vs a named vector
plain <- c(78, 92, 85, 67)
named <- c(Alice = 78, Bob = 92, Carol = 85, Dave = 67)

cat('Plain vector:', plain, '
')
cat('Named vector:
')
print(named)

c() による名前付きベクトルの作成

名前付きベクトルを作成する最も簡単な方法は、c() の中で name = value の組を使用することです。名前には有効な文字列を使用できます。スペースや特殊文字を含む場合は、バッククォートまたは引用符で囲みます。

# GDP in trillions USD
gdp <- c(USA = 27.4, China = 18.0, Germany = 4.1,
         Japan = 4.2, UK = 3.1)
cat('GDP values:
')
print(gdp)
cat('Names:', names(gdp), '
')
cat('Values:', unname(gdp), '
')

names() 関数

names(x) は、ベクトルの名前を character ベクトルとして取得します。作成後に names(x) <- c(...) を使用して名前を代入することもでき、その場合はベクトルがその場で変更されます。

# Assign names after creation
temps <- c(22.1, 18.5, 25.3, 20.0)
cat('Before naming:', temps, '
')

names(temps) <- c('Mon', 'Tue', 'Wed', 'Thu')
cat('After naming:
')
print(temps)

# Retrieve names
cat('Days:', names(temps), '
')

名前による要素へのアクセス

名前付きベクトルの要素には、x["name"] または x[["name"]] でアクセスします。単一の角括弧 [] は名前付きの部分集合を返し、[[]] は名前なしの値だけを返します。

scores <- c(Math = 88, Science = 92, English = 75, History = 81)

# Single bracket: keeps name
cat('Math score (with name):
')
print(scores['Math'])

# Double bracket: just the value
cat('Science score (value only):', scores[['Science']], '
')

# Multiple names
cat('STEM subjects:
')
print(scores[c('Math', 'Science')])

関数型スタイルで使用する setNames()

setNames(x, nm) は、元の x を変更せずに、nm を名前として設定した x のコピーを返します。操作のチェーンの一部としてベクトルに名前を付けたい場合に便利です。

# setNames returns a named copy (does not modify original)
raw_values <- c(0.85, 0.72, 0.91, 0.68)
metrics <- setNames(raw_values, c('Precision', 'Recall', 'F1', 'Accuracy'))

cat('Original (unchanged):', raw_values, '
')
cat('Named metrics:
')
print(metrics)

# Best metric
best_name <- names(which.max(metrics))
cat('Best metric:', best_name, '=', metrics[best_name], '
')

名前の変更

names(x) をインデックス指定すると、個々の名前を変更できます。ベクトル全体を作り直さずに、一部の要素の名前だけを変更したい場合に便利です。

prices <- c(apple = 1.20, bannana = 0.80, cherry = 3.50)  # typo!

# Fix a single name
names(prices)[2] <- 'banana'
cat('Fixed names:
')
print(prices)

# Rename all
names(prices) <- c('Apple', 'Banana', 'Cherry')  # capitalise
cat('Capitalised:
')
print(prices)

seq() と names() による名前付きシーケンス

seq() と setNames() を組み合わせると、名前付きシーケンスを作成できます。名前によって数値の意味を補足できるため、月次または週次のインデックスに特に便利です。

# Monthly average temperature with names
temps_monthly <- setNames(
  c(3.1, 4.2, 8.5, 13.0, 17.2, 21.0, 23.5, 23.0, 19.0, 13.5, 7.8, 4.0),
  month.abb
)
cat('Monthly temps:
')
print(temps_monthly)
cat('Summer avg:', mean(temps_monthly[c('Jun', 'Jul', 'Aug')]), '
')

名前付きベクトルのフィルタリング

名前付きベクトルでは、logical インデックスと character インデックスの両方を使用できます。名前で要素を選択し、同時に値でフィルタリングできるため、小規模な参照テーブルを表現するのに非常に適しています。

population <- c(Tokyo = 37.4, Delhi = 32.9, Shanghai = 28.5,
                Dhaka = 22.5, Cairo = 21.3, Mumbai = 20.7)

# Select cities with population > 25 million
big_cities <- population[population > 25]
cat('Cities over 25M:
')
print(big_cities)

# Sort descending by population
cat('Ranked:
')
print(sort(population, decreasing = TRUE))

unname() による名前の削除

unname(x) はベクトルからすべての名前を取り除き、値だけを返します。名前付きベクトルを想定していない関数にデータを渡す場合や、出力上で名前が視覚的なノイズになる場合に便利です。

named_vec <- c(x1 = 10, x2 = 20, x3 = 30, x4 = 40)
cat('Named:
')
print(named_vec)

unnamed_vec <- unname(named_vec)
cat('Unnamed:
')
print(unnamed_vec)

# Check
cat('Has names after unname:', !is.null(names(unnamed_vec)), '
')

参照テーブルとしての名前付きベクトル

名前付きベクトルの最も強力な用途の一つは、キーから値への対応付けを行う参照テーブルです。if-else 文を連ねる代わりに、名前付きベクトルを作成してインデックス指定します。

# Map month abbreviation to number of days
days_in_month <- c(Jan=31, Feb=28, Mar=31, Apr=30, May=31,
                   Jun=30, Jul=31, Aug=31, Sep=30, Oct=31,
                   Nov=30, Dec=31)

# Look up specific months
query <- c('Mar', 'Jul', 'Nov')
cat('Days in', query[1], ':', days_in_month[query[1]], '
')
cat('Days in', query[2], ':', days_in_month[query[2]], '
')
cat('Days in', query[3], ':', days_in_month[query[3]], '
')

名前付きベクトル:重要事項

R における名前付きベクトルの機能をまとめます。

  • c(name = value, ...) で作成するか、names(x) <- c(...) で名前を代入する
  • x['name'](名前を保持)または x[['name']](値のみ)で名前によってアクセスする
  • setNames(x, nm) は元のベクトルを変更せず、名前付きコピーを返す
  • unname(x) はすべての名前を削除する
  • 名前付きベクトルは、洗練された参照テーブルとして使用できる(if-else の連鎖を置き換えられる)
# Complete workflow
rates <- c(USD = 1.0, EUR = 0.92, GBP = 0.79, JPY = 149.5)

# Convert 100 USD to each currency
amount_usd <- 100
converted <- amount_usd * rates
cat('100 USD in other currencies:
')
print(round(converted, 2))

クイックチェック

x['key'] と x[['key']] が名前付きベクトル x に対して返すものの違いは何ですか?

復習:名前付きベクトル

よくできました。このレッスンの重要なポイントをまとめます。

  • 名前付きベクトルでは、各要素に character ラベルを対応付ける
  • c(name = val) の構文で作成するか、names(x) <- ... で名前を代入する
  • x['name'] は名前付き部分集合を返し、x[['name']] は値だけを返す
  • setNames() は、名前を付けるための関数型(元の値を変更しない)方法である
  • 名前付きベクトルを参照テーブルとして使用し、冗長な if-else の連鎖を置き換える
  • 元の値が必要な場合は unname() で名前を取り除く
# Named vector as grade lookup
grade_map <- c('90'='A', '80'='B', '70'='C', '60'='D')
student_score <- 80

# Find grade bracket
brackets <- c(90, 80, 70, 60)
threshold <- max(brackets[brackets <= student_score])
cat('Score:', student_score, '-> Grade:', grade_map[as.character(threshold)], '
')
無料で開始

AI チューターと学ぶ R — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
43
レッスン
159

よくある質問

「名前付きベクトルと名前付きシーケンス」レッスンは無料ですか?

はい。「名前付きベクトルと名前付きシーケンス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「名前付きベクトルと名前付きシーケンス」で何を学びますか?

ベクトルに名前を割り当ててアクセスし、読みやすいコードを書きます。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「名前付きベクトルと名前付きシーケンス」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 整数範囲のためのコロン演算子
  2. カスタムシーケンスのためのseq()
  3. 値の繰り返しのためのrep()
  4. 名前付きベクトルと名前付きシーケンス
← R Academyに戻る