리스트 수정하기
Coddy R 여정의 기초 섹션에 포함된 레슨 — 78개 중 73번째.
이제 리스트를 생성하고 요소에 접근하는 방법을 알게 되었으니, 이를 수정하는 방법을 배워보겠습니다. 기존 요소를 변경하거나, 새로운 요소를 추가하거나, 요소를 완전히 제거할 수 있습니다.
기존 요소를 변경하려면 할당 연산자와 함께 이중 대괄호를 사용하세요:
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두 번째 요소를 제거한 후, 남은 요소들이 빈 자리를 채우기 위해 이동한다는 점에 유의하세요. 위치 3에 있던 요소가 이제 위치 2에 있게 됩니다.
챌린지
쉬움세 줄의 입력을 받게 됩니다:
- 리스트를 초기화하기 위한 쉼표로 구분된 세 개의 값 (예:
50,hello,TRUE) - 수정을 위한 쉼표로 구분된 인덱스와 새로운 값 (예:
2,goodbye) - 삭제할 요소의 인덱스 (예:
3)
다음 작업을 수행하세요:
- 세 개의 초기 값으로 리스트를 생성합니다 (적절한 타입으로 변환하세요: numeric, character, logical)
- 원본 리스트를 출력합니다
- 지정된 인덱스의 요소를 새로운 값으로 수정합니다 (문자열 character string으로 유지하세요)
- 수정 후의 리스트를 출력합니다
- 리스트에 값이
999인 네 번째 요소를 새로 추가합니다 - 새 요소가 추가된 후의 리스트를 출력합니다
- 지정된 인덱스(세 번째 입력값)의 요소를 삭제합니다
- 최종 리스트를 출력합니다
예를 들어, 입력값이 다음과 같다면:
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
- 네 번째 요소 추가 후: "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)) # 쉼표로 구분된 세 개의 값
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. 세 개의 초기 값(val1, val2, val3)으로 리스트를 생성하세요
# 2. 원본 리스트를 출력하세요
# 3. mod_index에 있는 요소를 mod_value로 수정하세요
# 4. 수정 후의 리스트를 출력하세요
# 5. 값이 999인 네 번째 요소를 새로 추가하세요
# 6. 추가 후의 리스트를 출력하세요
# 7. rem_index에 있는 요소를 삭제하세요 (NULL 사용)
# 8. 최종 리스트를 출력하세요이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.