Exercício de Aplicação: Classificação de Amostras Biológicas por Nível (Biologia/Sáude)

Author

Jean Resende

Cenário

Em um estudo biológico, você coletou amostras e mediu a concentração de uma proteína (em ng/mL) em cada uma. Você precisa classificar cada amostra em “Baixo”, “Médio” ou “Alto” nível, e também identificar as amostras com “Nível Crítico” que exigem atenção imediata.

Dados

Você tem as concentrações de proteína para 8 amostras:

concentracoes_proteina <- c(15.5, 32.1, 8.9, 45.0, 
                            21.3, 55.7, 12.0, 39.9)

Instruções para o Exercício

  • Crie uma função chamada classificar_nivel_proteina que receba um valor de concentração de proteína como argumento.

    • Dentro da função, use condicionais (if-else if-else) para classificar o nível:

      • "Baixo": se a concentração for menor que 15 ng/mL.

      • "Médio": se a concentração for entre 15 ng/mL (inclusive) e 40 ng/mL (exclusive).

      • "Alto": se a concentração for 40 ng/mL ou mais.

    • A função deve retornar a string de classificação ("Baixo", "Médio", "Alto").

  • Crie uma segunda função chamada gerar_alerta_proteina que receba a concentração e a classificação do nível como argumentos.

    • Dentro dela, defina um limiar_critico_alerta (por exemplo, 50 ng/mL).

    • Se a concentração for maior ou igual ao limiar_critico_alerta, a função deve retornar uma mensagem de alerta como: "ALERTA! Amostra com nível crítico de [Concentração] ng/mL!".

    • Caso contrário, deve retornar uma string vazia "".

  • Use um laço for para iterar sobre cada concentração em concentracoes_proteina.

    • Dentro do laço, para cada concentração, chame a função classificar_nivel_proteina para obter a classificação.

    • Em seguida, chame a função gerar_alerta_proteina para verificar se há um alerta.

    • Finalmente, imprima a classificação e, se houver, o alerta para cada amostra, no formato: "Amostra X: [Concentração] ng/mL - Nível: [Classificação] [Mensagem de Alerta]" (Onde [Mensagem de Alerta] só aparece se não for uma string vazia).

Gabarito

# Dados fornecidos
concentracoes_proteina <- c(15.5, 32.1, 8.9, 45.0, 
                            21.3, 55.7, 12.0, 39.9)

# 1. Função para classificar o nível de proteína
classificar_nivel_proteina <- function(concentracao) {
  if (concentracao < 15) {
    nivel <- "Baixo"
  } else if (concentracao >= 15 && concentracao < 40) {
    nivel <- "Médio"
  } else { # concentracao >= 40
    nivel <- "Alto"
  }
  return(nivel)
}

# 2. Função para gerar alerta de proteína
gerar_alerta_proteina <- function(concentracao, classificacao_nivel) {
  limiar_critico_alerta <- 50 # ng/mL
  if (concentracao >= limiar_critico_alerta) {
    alerta <- paste0("ALERTA! Amostra com nível crítico de ",
                     concentracao, " ng/mL!")
  } else {
    alerta <- "" # Retorna string vazia se não houver alerta
  }
  return(alerta)
}

# 3. Usar o laço 'for' e as funções para analisar as concentrações
for (i in 1:length(concentracoes_proteina)) {
  concentracao_atual <- concentracoes_proteina[i]
  
  # Chama a função de classificação
  classificacao <- classificar_nivel_proteina(concentracao_atual)
  
  # Chama a função de alerta
  alerta <- gerar_alerta_proteina(concentracao_atual, classificacao)
  
  # Imprime o resultado
  # Usamos paste0 para juntar as partes sem espaços extras automáticos
  cat(paste0("Amostra ", i, ": ", concentracao_atual, 
             " ng/mL - Nível: ", classificacao, " ", alerta, "\n"))
}
Amostra 1: 15.5 ng/mL - Nível: Médio 
Amostra 2: 32.1 ng/mL - Nível: Médio 
Amostra 3: 8.9 ng/mL - Nível: Baixo 
Amostra 4: 45 ng/mL - Nível: Alto 
Amostra 5: 21.3 ng/mL - Nível: Médio 
Amostra 6: 55.7 ng/mL - Nível: Alto ALERTA! Amostra com nível crítico de 55.7 ng/mL!
Amostra 7: 12 ng/mL - Nível: Baixo 
Amostra 8: 39.9 ng/mL - Nível: Médio