Menu
Coddy logo textTech

名前付きベクトルの検索

CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 7/64。

名前付きベクトルは値を名前の下に格納するため、ルックアップテーブルになります。名前がキーで、要素がその値です。値だけを取得するには、名前を [[ ]] に入れます。

prices <- c(tea = 4, cake = 7)
print(prices[["cake"]])
print(names(prices))

出力:

[1] 7
[1] "tea"  "cake"

単一の角括弧は、要素をその名前とともに返します。[[ ]]は値だけを返します。

prices <- c(tea = 4, cake = 7)
print(prices["cake"])
print(prices[["cake"]] * 2)

出力:

cake 
   7 
[1] 14

名前は変数から取得できます。これは、プログラムが入力から読み取ったキーを検索する方法です。

prices <- c(tea = 4, cake = 7)
item <- "tea"
print(prices[[item]])

出力:

[1] 4

名前のベクトルを使うと、複数のキーを一度に検索でき、重複も含められるため、sum() で注文の合計を1ステップで計算できます。

prices <- c(tea = 4, cake = 7)
order <- c("tea", "cake", "tea")
print(sum(prices[order]))

出力:

[1] 15

存在しない名前は、2つの形式で異なる動作をします。prices["milk"] は NA を返しますが、prices[["milk"]] は subscript out of bounds というエラーで停止します。

challenge icon

チャレンジ

簡単

line_total(item, qty)を完成させてください。この関数では、以下のメニューを定義します。itemの価格にqtyを掛けた値を、小数点以下2桁で整形して返します。teaと3の場合は7.50になります。

menu <- c(tea = 2.5, coffee = 3, cake = 4.25, soup = 6)

入力に含まれるすべての項目はメニューにあります。提供されたコードは項目と数量を読み取り、返された値を出力します。

自分で試してみよう

line_total <- function(item, qty) {
  menu <- c(tea = 2.5, coffee = 3, cake = 4.25, soup = 6)
  # ここにコードを書いてください
  ""
}

# 提供された入出力コード: そのままにしておいてください
input <- suppressWarnings(readLines(file("stdin")))
cat(line_total(input[1], as.numeric(input[2])), sep = "\n")
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Rオンラインコンパイラ