名前付きベクトル
CoddyのRジャーニー「基礎」セクションの一部。レッスン 62/78。
これまでは、数値の位置を使ってベクトルの要素にアクセスしてきました。しかし、代わりに意味のある名前でアクセスできるとしたらどうでしょうか。名前付きベクトルを使うと、各要素にラベルを割り当てられるため、コードがより読みやすく、自己説明的になります。
作成時に名前を指定することで、名前付きベクトルを作成できます。
ages <- c(alice = 25, bob = 30, charlie = 28)
print(ages)出力:
alice bob charlie
25 30 28名前で要素にアクセスするには、角括弧内に文字列として名前を指定します。
print(ages["bob"])出力:
bob
30既存のベクトルに names() 関数を使って名前を追加することもできます:
scores <- c(85, 92, 78)
names(scores) <- c("math", "science", "english")
print(scores["math"])出力:
math
85名前付きベクトルは、科目ごとの生徒の成績や商品名ごとの価格の保存など、自然なラベルを持つデータを扱うときに特に便利です。
チャレンジ
簡単入力として2行を受け取ります。
- 商品名をカンマ区切りにしたリスト(例:
laptop,phone,tablet,headphones) - 対応する価格をカンマ区切りにしたリスト(例:
999,699,449,199)
次の操作を実行します。
- 価格から数値ベクトルを作成する
names()関数を使用して、商品名をベクトルに割り当てる- 名前付きベクトル全体を出力する
- 名前を使ってアクセスし、2番目の商品価格を出力する
- 名前を使ってアクセスし、最後の商品価格を出力する
たとえば、入力が次のとおりの場合:
apple,banana,orange,grape
2,1,3,4出力は次のようになります。
apple banana orange grape
2 1 3 4
banana
1
grape
4注:2番目と最後の要素には、数値位置ではなく、名前を添字(たとえば文字列prices["banana"])として使用してアクセスしてください。名前は最初の入力行から取得されるため、まずそこで正しい名前を確認してください。
自分で試してみよう
# 入力を読み込む
con <- file("stdin", "r")
products_input <- suppressWarnings(readLines(con, n = 1))
prices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# カンマ区切りの入力を解析する
product_names <- strsplit(products_input, ",")[[1]]
price_values <- strsplit(prices_input, ",")[[1]]
# TODO: 以下にコードを書いてください
# 1. 価格から数値ベクトルを作成する
# 2. names() を使ってベクトルに製品名を割り当てる
# 3. 名前付きベクトル全体を出力する
# 4. 名前を使ってアクセスし、2番目の製品の価格を出力する
# 5. 名前を使ってアクセスし、最後の製品の価格を出力するこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ