Menu
Coddy logo textTech

벡터화된 ifelse()

Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 48번째.

if는 하나의 조건을 테스트합니다. 여러 값으로 이루어진 벡터가 주어지면 the condition has length > 1 오류와 함께 중단됩니다. ifelse(test, yes, no)는 요소별로 작동하며 각 요소에 대해 하나의 결과를 반환합니다:

temps <- c(12, 25, 31, 18)
print(ifelse(temps > 20, "warm", "cool"))

출력:

[1] "cool" "warm" "warm" "cool"

yes와 no는 같은 길이의 벡터일 수 있으므로 각 요소는 자체적으로 계산된 값을 가질 수 있습니다:

price <- c(40, 120, 75)
final <- ifelse(price > 100, price * 0.9, price)
print(final)

출력:

[1]  40 108  75

두 가지를 초과하는 결과를 위해 ifelse() 호출을 중첩합니다. 각 요소에 대해 조건이 순서대로 확인됩니다:

scores <- c(95, 72, 48, 81)
grade <- ifelse(scores >= 90, "A", ifelse(scores >= 70, "B", "C"))
print(grade)

출력:

[1] "A" "B" "C" "B"

ifelse()는 각 행에 고유한 레이블이 필요한 새 데이터 프레임 열에 유용합니다:

df <- data.frame(item = c("tea", "oil"), stock = c(0, 8))
df$status <- ifelse(df$stock == 0, "sold out", "available")
print(df)

출력:

  item stock    status
1  tea     0  sold out
2  oil     8 available
challenge icon

챌린지

쉬움

shipping(weights)을 완성하세요. 각 소포의 배송비를 , 로 연결하여 반환하세요. 최대 1kg인 소포의 비용은 4, 최대 5kg인 소포의 비용은 9이며, 더 무거운 소포는 kg당 2의 비용이 듭니다. 반복문이 아닌 ifelse()를 사용하세요.

제공된 코드는 무게를 쉼표로 구분된 한 줄로 읽고 반환된 값을 출력합니다.

직접 해보기

shipping <- function(weights) {
  # 여기에 코드를 작성하세요
  ""
}

# 제공된 입력/출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
cat(shipping(as.numeric(strsplit(input[1], ",")[[1]])), sep = "\n")
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 R 컴파일러