Menu
Coddy logo textTech

リストの変更

CoddyのRジャーニー「基礎」セクションの一部 — レッスン 73/78。

リストの作成方法と要素へのアクセス方法を理解したところで、次はそれらを変更する方法を学びましょう。既存の要素を変更したり、新しい要素を追加したり、要素を完全に削除したりすることができます。

既存の要素を変更するには、代入演算子と共に二重の角括弧を使用します:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)

出力:

[[1]]
[1] 10

[[2]]
[1] "world"

[[3]]
[1] TRUE

新しい要素を追加するには、まだ存在しないインデックスに代入するだけです:

my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)

出力:

[[1]]
[1] 10

[[2]]
[1] "hello"

[[3]]
[1] FALSE

要素を削除するには、NULL を代入します:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)

出力:

[[1]]
[1] 10

[[2]]
[1] TRUE

2番目の要素を削除した後、残りの要素が移動して隙間を埋めることに注目してください。位置3にあった要素は、現在は位置2にあります。

challenge icon

チャレンジ

簡単

3行の入力が与えられます:

  1. リストを初期化するための3つのカンマ区切り値(例:50,hello,TRUE
  2. 修正のための、カンマで区切られたインデックスと新しい値(例:2,goodbye
  3. 削除する要素のインデックス(例:3

以下の操作を実行してください:

  1. 3つの初期値を使用してリストを作成します(適切な型:数値型、文字型、論理型に変換してください)
  2. 元のリストを表示します
  3. 指定されたインデックスの要素を新しい値で修正します(文字型として保持してください)
  4. 修正後のリストを表示します
  5. リストに4番目の新しい要素として値 999 を追加します
  6. 新しい要素を追加した後のリストを表示します
  7. (3番目の入力から)指定されたインデックスの要素を削除します
  8. 最終的なリストを表示します

例えば、入力が以下の場合:

100,world,FALSE
1,updated
2

出力は以下のようになります:

[[1]]
[1] 100

[[2]]
[1] "world"

[[3]]
[1] FALSE

[[1]]
[1] "updated"

[[2]]
[1] "world"

[[3]]
[1] FALSE

[[1]]
[1] "updated"

[[2]]
[1] "world"

[[3]]
[1] FALSE

[[4]]
[1] 999

[[1]]
[1] "updated"

[[2]]
[1] FALSE

[[3]]
[1] 999

説明:

  • 元のリスト:100, "world", FALSE
  • インデックス 1 を修正した後:"updated", "world", FALSE
  • 4番目の要素を追加した後:"updated", "world", FALSE, 999
  • インデックス 2 を削除した後:"updated", FALSE, 999(残りの要素がシフトします)

修正には二重ブラケット [[ ]] を使用し、要素を削除するには NULL を代入することを忘れないでください。

チートシート

リスト内の既存の要素を修正するには、代入と一緒に二重括弧を使用します:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"

リストに新しい要素を追加するには、まだ存在しないインデックスに代入します:

my_list <- list(10, "hello")
my_list[[3]] <- FALSE

リストから要素を削除するには、その要素に NULL を代入します:

my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL

要素が削除されると、残りの要素がシフトして隙間を埋めます。位置3にあった要素は位置2になります。

自分で試してみよう

# 入力を読み込む
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1))  # カンマで区切られた3つの値
modify_input <- suppressWarnings(readLines(con, n = 1))    # インデックスと新しい値
remove_index <- suppressWarnings(readLines(con, n = 1))    # 削除するインデックス
close(con)

# 初期値を解析する
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])

# 修正用の入力を解析する
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]

# 削除するインデックスを解析する
rem_index <- as.numeric(remove_index)

# TODO: 以下にコードを記述してください
# 1. 3つの初期値(val1, val2, val3)を含むリストを作成する
# 2. 元のリストを表示する
# 3. mod_index の要素を mod_value で修正する
# 4. 修正後のリストを表示する
# 5. 値 999 を持つ新しい4番目の要素を追加する
# 6. 追加後のリストを表示する
# 7. rem_index の要素を削除する(NULLを使用)
# 8. 最終的なリストを表示する
quiz icon腕試し

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

基礎のすべてのレッスン