Bioestatística
Prof. Dr. Edson Zangiacomi Martinez
Faculdade de Medicina de Ribeirão Preto
Universidade de São Paulo (USP)
Esta página está em construção!
Todo seu conteúdo não é definitivo...
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)