Menu
Coddy logo textTech

キーの確認

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

存在しない可能性のあるキーを検索する前に、%in% を使って名前に含まれているか確認します。

stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))

出力:

[1] TRUE
[1] FALSE

検索をifで囲むと、キーが見つからない場合にNAやエラーの代わりに既定値を指定できます。

stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)

出力:

[1] 0

値が0のキーが存在する場合と、キーが見つからない場合は異なります。pearsは登録されていてout of stock、plumsはまったく販売されていません。

リストでも同じ%in% names()による確認を使います。リストに存在しない名前を指定するとエラーではなくNULLが返されるため、is.null()も使えます。

user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))

出力:

[1] TRUE
[1] TRUE

小さなヘルパー関数を使うと、プログラムが多くのキーを検索するときに、チェックを1か所にまとめられます。

get_or <- function(x, key, default) {
  if (key %in% names(x)) x[[key]] else default
}
stock <- c(apples = 12)
print(get_or(stock, "apples", 0))
print(get_or(stock, "kiwis", 0))

出力:

[1] 12
[1] 0
challenge icon

チャレンジ

簡単

stock_status(stock, item)を完成させてください。itemがstockのキーでない場合はunknownを、その値が0の場合はout of stockを、それ以外の場合はin stock: に数量を続けたものを返します。

提供されたコードは、カンマで区切られたname=quantityのペアとして在庫を読み取り、続いて項目を読み取り、返された値を出力します。

自分で試してみよう

stock_status <- function(stock, item) {
  # ここにコードを書いてください
  ""
}

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

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

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

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