벡터 연산과 리사이클링
Coddy R 여정의 기초 섹션에 포함된 레슨 — 78개 중 69번째.
길이가 같은 두 벡터 사이에서 산술 연산을 수행할 때, R은 각 요소를 일대일로 대응시켜 연산을 적용합니다:
a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)출력:
[1] 11 22 33하지만 벡터의 길이가 서로 다르면 어떻게 될까요? R은 **재사용(recycling)**이라고 불리는 동작을 사용합니다. 짧은 벡터가 긴 벡터의 길이에 맞춰 반복됩니다:
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)출력:
[1] 10 200 30 400 50 600여기서 multiplier는 곱셈이 수행되기 전에 c(10, 100, 10, 100, 10, 100)가 되도록 재사용(recycled)되었습니다. 이는 단일 값으로 연산할 때 특히 유용합니다:
prices <- c(10, 20, 30)
print(prices * 1.1)출력:
[1] 11 22 33단일 값 1.1은 prices의 길이에 맞춰 재사용(recycle)됩니다. 긴 벡터의 길이가 짧은 벡터 길이의 배수가 아닐 때는 주의하십시오. R은 여전히 연산을 수행하지만, 부분 재사용(partial recycling)에 대한 경고를 생성할 수 있기 때문입니다.
챌린지
쉬움두 줄의 입력을 받게 됩니다:
- 기준 값들을 나타내는 쉼표로 구분된 숫자 목록 (예:
10,20,30,40,50,60) - 곱할 값(multipliers)들을 나타내는 쉼표로 구분된 숫자 목록 (예:
2,5)
벡터 산술 연산과 재사용(recycling) 규칙을 사용하여 다음을 수행하세요:
- 기준 값들로 숫자 벡터를 생성합니다.
- 곱할 값들로 숫자 벡터를 생성합니다.
- 기준 값 벡터에 곱할 값 벡터를 곱합니다 (R은 더 짧은 벡터를 재사용합니다).
- 곱셈 결과를 출력합니다.
- 원래의 기준 값 벡터의 각 요소에
100을 더합니다 (단일 값 재사용). - 덧셈 결과를 출력합니다.
- 기준 값 벡터에서 곱할 값 벡터를 뺍니다.
- 뺄셈 결과를 출력합니다.
예를 들어, 입력이 다음과 같다면:
5,10,15,20,25,30
3,7출력은 다음과 같아야 합니다:
[1] 15 70 45 140 75 210
[1] 105 110 115 120 125 130
[1] 2 3 12 13 22 23설명:
- 곱셈: 곱할 값 벡터
c(3, 7)이c(3, 7, 3, 7, 3, 7)로 재사용되어,5*3, 10*7, 15*3, 20*7, 25*3, 30*7의 결과가 나옵니다. - 덧셈: 단일 값
100이 재사용되어 각 요소에 더해집니다. - 뺄셈: 곱할 값 벡터가 다시 재사용되어,
5-3, 10-7, 15-3, 20-7, 25-3, 30-7의 결과가 나옵니다.
치트 시트
길이가 서로 다른 벡터 간에 산술 연산을 수행할 때, R은 재사용(recycling)을 사용합니다. 즉, 짧은 벡터가 긴 벡터의 길이에 맞춰 반복됩니다.
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)출력:
[1] 10 200 30 400 50 600multiplier 벡터는 곱셈이 수행되기 전에 c(10, 100, 10, 100, 10, 100)으로 재사용됩니다.
단일 값 재사용은 특히 유용합니다:
prices <- c(10, 20, 30)
print(prices * 1.1)출력:
[1] 11 22 331.1이라는 값은 prices의 길이에 맞춰 재사용됩니다.
참고: 긴 벡터의 길이가 짧은 벡터 길이의 배수가 아닐 경우 R에서 경고 메시지가 발생할 수 있습니다.
직접 해보기
# 입력 읽기
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# 쉼표로 구분된 값을 숫자 벡터로 파싱
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])
# TODO: 아래에 코드를 작성하세요
# 1. base_values에 multipliers를 곱하기 (재사용 규칙이 자동으로 적용됨)
# 2. 곱셈 결과 출력
# 3. base_values의 각 요소에 100 더하기
# 4. 덧셈 결과 출력
# 5. base_values에서 multipliers 빼기
# 6. 뺄셈 결과 출력이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.