top of page

Funções ifelse(), if() e cat()

Criando funções no R

Funções stopifnot() e warning()

Função ifelse()

# A sintaxe é ifelse(expressão,x,y)

# Exemplo 1

nota1 <- 9

nota2 <- 6

ifelse(nota1>nota2,"A nota 1 é maior","A nota 1 não é maior")

# Exemplo 2

 

a <- c(8,34,8,4,7,5,9,5,3,6,3,6)

b <- ifelse(a %% 2 == 0,"par","ímpar")

 

Função if()

​nota1 <- 9

nota2 <- 6

if (nota1>nota2) {"A nota 1 é maior"} else

  {"A nota 1 não é maior"}

 

Função cat()

 

a <- c(8,34,8,4,7,5,9,5,3,6,3,6)

cat(a)

cat(a,"\n")

cat("Arroz","Feijão","\n")

cat("Arroz","Feijão","\n",sep="---")

 

 

Criando funções no R

 

# Exemplo 1

 

IMC <- function(peso,estatura) {

 if (estatura<=0) { stop("Verifique a estatura") }

 IMC <- peso/(estatura*estatura)

 cat("O IMC é",IMC,"\n")

 if (IMC<18.5) { cat("Baixo Peso","\n") }         else

 if (IMC<24.9) { cat("Peso normal","\n") }        else

 if (IMC<29.9) { cat("Pré obesidade","\n") }      else

 if (IMC<34.9) { cat("Obesidade grau I","\n") }   else

 if (IMC<39.9) { cat("Obesidade grau II","\n") }  else

               { cat("Obesidade grau III","\n") }

}

# Lembrar que, no R, há sempre muitas formas de escrevermos uma

# função com o mesmo propósito:

IMC <- function(peso,estatura) {
if (estatura<=0) { stop("Verifique a estatura") }
IMC <- peso/(estatura*estatura)
cat("O IMC é",IMC,"\n")
a <- cut(IMC,breaks=c(1,18.5,25,30,35,40,80))
clas <- switch(as.character(a),"(1,18.5]"  = "Baixo Peso",
                               "(18.5,25]" = "Peso normal",
                               "(25,30]"   = "Pré obesidade",
                               "(30,35]"   = "Obesidade grau I",
                               "(35,40]"   = "Obesidade grau II",
                               "(40,80]"   = "Obesidade grau III")
cat(clas,"\n")
}

# Exemplo 2

# Usando a função stopifnot()

 

IMCcalc <- function(peso,estatura) {

 stopifnot(peso>10,peso<200,estatura>1)
 IMC <- peso/(estatura*estatura)     

 return(IMC)

}

 

a <- IMCcalc(90,1.89)

a


[1] 25.19526

IMCcalc(250,1.34)

Erro: peso < 200 is not TRUE

# Exemplo 3

# Usando a função warning()


IMCcalc <- function(peso,estatura) {
if (estatura>3) warning("Confira se a estatura está expressa em centímetros")
IMC <- peso/(estatura*estatura)     
 return(IMC)
}


IMCcalc(80,134)


[1] 0.004455335
Warning message:
In IMCcalc(80, 134) : Confira se a estatura está expressa em centímetros


 

# Exemplo 4

# Usando a função readline()

IMCcalc <- function() {
nome <- readline(prompt="Qual o seu nome? ")
peso <- readline(prompt=paste(nome,", qual o seu peso em quilogramas? "))
estt <- readline(prompt=paste(nome,", qual a sua estatura em metros? "))
imc  <- as.numeric(peso)/(as.numeric(estt)^2)
cat("Olá,",nome,", seu IMC é",round(imc,2),"kg/m2\n")
}

​# Exemplo 5

describe <- function(variab,grupo,data,ndec=2) {

 n.d<-aggregate(variab~grupo,data=data,length)[,2]

 m.d<-round(aggregate(variab~grupo,data=data,mean)[,2],ndec)

 sd.d<-round(aggregate(variab~grupo,data=data,sd)[,2],ndec)

 q<-aggregate(variab~grupo,data=data,quantile)

 lab.d<-q[,1]

 med.d<-q[,2][,4]

 q1.d<-q[,2][,3]

 q3.d<-q[,2][,5]

 des<-data.frame(lab.d,n.d,m.d,sd.d,med.d,q1.d,q3.d)

 names(des)<-c("Grupo","n","Média","DP","Mediana","Q1","Q3")

 return(des) }

 

attach(dados)

describe(Peso,esaude,dados)

describe(Peso,esaude,dados,ndec=6)

a <- describe(Peso,ecivil,dados)

mode(a)

class(a)

# Exemplo 6

# A partir da versão 4.1, a função function() ganhou um formato alternativo

# Formato original

imc  <- function(peso,estt) peso/estt^2

# Formato alternativo

imc <- \(peso,estt) peso/estt^2

# Exemplo 7

# Funções criadas com function() são objetos do tipo closure

typeof(imc)

[1] "closure"

# Exemplo 8 – Execute estas linhas no R e veja o resultado

heart <- function(x,sign)

   { heart <- sign*sqrt(1-x*x)+abs(x)^(2/3) }

curve(heart(x,1),xlim=c(-1,1),ylim=c(-1,1.5),col="red",lwd=4)

curve(heart(x,-1),add=T,col="red",lwd=4)

 

 

 

 

bottom of page