リストの変更
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] TRUE2番目の要素を削除した後、残りの要素が移動して隙間を埋めることに注目してください。位置3にあった要素は、現在位置2にあります。
チャレンジ
簡単3行の入力を受け取ります:
- リストを初期化するための3つのカンマ区切り値(例:
50,hello,TRUE) - 修正のためのインデックスと新しい値のカンマ区切り(例:
2,goodbye) - 削除する要素のインデックス(例:
3)
以下の操作を実行してください:
- 3つの初期値でリストを作成します(適切な型に変換してください:数値型、文字型、論理型)
- 元のリストを出力します
- 指定されたインデックスの要素を新しい値で修正します(文字列として保持します)
- 修正後のリストを出力します
- リストに値
999を持つ新しい4番目の要素を追加します - 新しい要素を追加した後のリストを出力します
- (3番目の入力から)指定されたインデックスの要素を削除します
- 最終的なリストを出力します
例えば、入力が以下の場合:
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 を代入することを忘れないでください。
自分で試してみよう
# 入力を読み込む
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. 最終的なリストを出力するこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。