Estruturas de Repetição
data(mtcars)
df <- mtcars
Instrução for
:
for(i in 1:5) {
mensagem <- paste("Esta é a iteração número", i)
print(mensagem)
}
## [1] "Esta é a iteração número 1"
## [1] "Esta é a iteração número 2"
## [1] "Esta é a iteração número 3"
## [1] "Esta é a iteração número 4"
## [1] "Esta é a iteração número 5"
for(i in 1:nrow(df)) {
veiculo <- rownames(df)[i]
n_cilindros <- df$cyl[i]
mensagem <- paste("O veículo", veiculo, "possui", n_cilindros, "cilindros")
print(mensagem)
}
## [1] "O veículo Mazda RX4 possui 6 cilindros"
## [1] "O veículo Mazda RX4 Wag possui 6 cilindros"
## [1] "O veículo Datsun 710 possui 4 cilindros"
## [1] "O veículo Hornet 4 Drive possui 6 cilindros"
## [1] "O veículo Hornet Sportabout possui 8 cilindros"
## [1] "O veículo Valiant possui 6 cilindros"
## [1] "O veículo Duster 360 possui 8 cilindros"
## [1] "O veículo Merc 240D possui 4 cilindros"
## [1] "O veículo Merc 230 possui 4 cilindros"
## [1] "O veículo Merc 280 possui 6 cilindros"
## [1] "O veículo Merc 280C possui 6 cilindros"
## [1] "O veículo Merc 450SE possui 8 cilindros"
## [1] "O veículo Merc 450SL possui 8 cilindros"
## [1] "O veículo Merc 450SLC possui 8 cilindros"
## [1] "O veículo Cadillac Fleetwood possui 8 cilindros"
## [1] "O veículo Lincoln Continental possui 8 cilindros"
## [1] "O veículo Chrysler Imperial possui 8 cilindros"
## [1] "O veículo Fiat 128 possui 4 cilindros"
## [1] "O veículo Honda Civic possui 4 cilindros"
## [1] "O veículo Toyota Corolla possui 4 cilindros"
## [1] "O veículo Toyota Corona possui 4 cilindros"
## [1] "O veículo Dodge Challenger possui 8 cilindros"
## [1] "O veículo AMC Javelin possui 8 cilindros"
## [1] "O veículo Camaro Z28 possui 8 cilindros"
## [1] "O veículo Pontiac Firebird possui 8 cilindros"
## [1] "O veículo Fiat X1-9 possui 4 cilindros"
## [1] "O veículo Porsche 914-2 possui 4 cilindros"
## [1] "O veículo Lotus Europa possui 4 cilindros"
## [1] "O veículo Ford Pantera L possui 8 cilindros"
## [1] "O veículo Ferrari Dino possui 6 cilindros"
## [1] "O veículo Maserati Bora possui 8 cilindros"
## [1] "O veículo Volvo 142E possui 4 cilindros"
Instrução while
:
i <- 1
while(i <= 5) {
mensagem <- paste("Esta é a iteração número", i)
print(mensagem)
i <- i + 1
}
## [1] "Esta é a iteração número 1"
## [1] "Esta é a iteração número 2"
## [1] "Esta é a iteração número 3"
## [1] "Esta é a iteração número 4"
## [1] "Esta é a iteração número 5"
i <- 1
while(i <= nrow(df)) {
veiculo <- rownames(df)[i]
n_cilindros <- df$cyl[i]
mensagem <- paste("O veículo", veiculo, "possui", n_cilindros, "cilindros")
print(mensagem)
i <- i + 1
}
## [1] "O veículo Mazda RX4 possui 6 cilindros"
## [1] "O veículo Mazda RX4 Wag possui 6 cilindros"
## [1] "O veículo Datsun 710 possui 4 cilindros"
## [1] "O veículo Hornet 4 Drive possui 6 cilindros"
## [1] "O veículo Hornet Sportabout possui 8 cilindros"
## [1] "O veículo Valiant possui 6 cilindros"
## [1] "O veículo Duster 360 possui 8 cilindros"
## [1] "O veículo Merc 240D possui 4 cilindros"
## [1] "O veículo Merc 230 possui 4 cilindros"
## [1] "O veículo Merc 280 possui 6 cilindros"
## [1] "O veículo Merc 280C possui 6 cilindros"
## [1] "O veículo Merc 450SE possui 8 cilindros"
## [1] "O veículo Merc 450SL possui 8 cilindros"
## [1] "O veículo Merc 450SLC possui 8 cilindros"
## [1] "O veículo Cadillac Fleetwood possui 8 cilindros"
## [1] "O veículo Lincoln Continental possui 8 cilindros"
## [1] "O veículo Chrysler Imperial possui 8 cilindros"
## [1] "O veículo Fiat 128 possui 4 cilindros"
## [1] "O veículo Honda Civic possui 4 cilindros"
## [1] "O veículo Toyota Corolla possui 4 cilindros"
## [1] "O veículo Toyota Corona possui 4 cilindros"
## [1] "O veículo Dodge Challenger possui 8 cilindros"
## [1] "O veículo AMC Javelin possui 8 cilindros"
## [1] "O veículo Camaro Z28 possui 8 cilindros"
## [1] "O veículo Pontiac Firebird possui 8 cilindros"
## [1] "O veículo Fiat X1-9 possui 4 cilindros"
## [1] "O veículo Porsche 914-2 possui 4 cilindros"
## [1] "O veículo Lotus Europa possui 4 cilindros"
## [1] "O veículo Ford Pantera L possui 8 cilindros"
## [1] "O veículo Ferrari Dino possui 6 cilindros"
## [1] "O veículo Maserati Bora possui 8 cilindros"
## [1] "O veículo Volvo 142E possui 4 cilindros"
Estruturas Condicionais
data(mtcars)
df <- mtcars
Instrução if
:
cilindros <- 4
if(cilindros > 4) {
mensagem <- "Mais de 4 cilindros"
} else {
mensagem <- "Até 4 cilindros"
}
print(mensagem)
## [1] "Até 4 cilindros"
classificador_veiculo <- function(cilindros) {
if(cilindros > 4) {
mensagem <- "Mais de 4 cilindros"
} else {
mensagem <- "Até 4 cilindros"
}
return(mensagem)
}
classificador_veiculo(2)
## [1] "Até 4 cilindros"
classificador_veiculo(6)
## [1] "Mais de 4 cilindros"
cilindros <- 4
carburadores <- 2
if(cilindros <= 4 & carburadores <= 2) {
mensagem <- "Até 4 cilindros e até 2 carburadores"
} else if(cilindros > 4 & carburadores <= 2) {
mensagem <- "Acima de 4 cilindros e até 2 carburadores"
} else if(cilindros <= 4 & carburadores > 2) {
mensagem <- "Até 4 cilindros e acima de 2 carburadores"
} else {
mensagem <- "Acima de 4 cilindros e acima de 2 carburadores"
}
print(mensagem)
## [1] "Até 4 cilindros e até 2 carburadores"
classificador_veiculo_2 <- function(cilindros, carburadores) {
if(cilindros <= 4 & carburadores <= 2) {
mensagem <- "Até 4 cilindros e até 2 carburadores"
} else if(cilindros > 4 & carburadores <= 2) {
mensagem <- "Acima de 4 cilindros e até 2 carburadores"
} else if(cilindros <= 4 & carburadores > 2) {
mensagem <- "Até 4 cilindros e acima de 2 carburadores"
} else {
mensagem <- "Acima de 4 cilindros e acima de 2 carburadores"
}
return(mensagem)
}
classificador_veiculo_2(2,2)
## [1] "Até 4 cilindros e até 2 carburadores"
classificador_veiculo_2(6,2)
## [1] "Acima de 4 cilindros e até 2 carburadores"
classificador_veiculo_2(2,6)
## [1] "Até 4 cilindros e acima de 2 carburadores"
classificador_veiculo_2(6,6)
## [1] "Acima de 4 cilindros e acima de 2 carburadores"
Combinando estruturas de repetição e condicionais
df$classificacao_veiculo <- NA
for(i in 1:nrow(df)) {
if(df$cyl[i] <= 4 & df$carb[i] <= 2) {
classificacao <- "Até 4 cilindros e até 2 carburadores"
} else if(df$cyl[i] > 4 & df$carb[i] <= 2) {
classificacao <- "Acima de 4 cilindros e até 2 carburadores"
} else if(df$cyl[i] <= 4 & df$carb[i] > 2) {
classificacao <- "Até 4 cilindros e acima de 2 carburadores"
} else {
classificacao <- "Acima de 4 cilindros e acima de 2 carburadores"
}
df$classificacao_veiculo[i] <- classificacao
}
table(df$classificacao_veiculo)
##
## Acima de 4 cilindros e acima de 2 carburadores
## 15
## Acima de 4 cilindros e até 2 carburadores
## 6
## Até 4 cilindros e até 2 carburadores
## 11
df$score <- NA
for(i in 1:nrow(df)) {
if(df$hp[i] > 150) {
coeficiente <- 1
} else {
coeficiente <- 2
}
score <- df$mpg[i] * coeficiente
df$score[i] <- score
}
head(df)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
## classificacao_veiculo score
## Mazda RX4 Acima de 4 cilindros e acima de 2 carburadores 42.0
## Mazda RX4 Wag Acima de 4 cilindros e acima de 2 carburadores 42.0
## Datsun 710 Até 4 cilindros e até 2 carburadores 45.6
## Hornet 4 Drive Acima de 4 cilindros e até 2 carburadores 42.8
## Hornet Sportabout Acima de 4 cilindros e até 2 carburadores 18.7
## Valiant Acima de 4 cilindros e até 2 carburadores 36.2
calcula_score <- function(dataframe, col_score, var_referencia, valor_referencia, coef_1, coef_2, var_calculo) {
dataframe[col_score] <- NA
for(i in 1:nrow(dataframe)) {
if(dataframe[i, var_referencia] > valor_referencia) {
coeficiente <- coef_1
} else {
coeficiente <- coef_2
}
score <- dataframe[i, var_calculo] * coeficiente
dataframe[i, col_score] <- score
}
return(dataframe)
}
df_2 <- calcula_score(dataframe = df,
col_score = "score2",
var_referencia = "hp",
valor_referencia = 150,
coef_1 = 1,
coef_2 = 2,
var_calculo = "mpg")
head(df_2)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
## classificacao_veiculo score score2
## Mazda RX4 Acima de 4 cilindros e acima de 2 carburadores 42.0 42.0
## Mazda RX4 Wag Acima de 4 cilindros e acima de 2 carburadores 42.0 42.0
## Datsun 710 Até 4 cilindros e até 2 carburadores 45.6 45.6
## Hornet 4 Drive Acima de 4 cilindros e até 2 carburadores 42.8 42.8
## Hornet Sportabout Acima de 4 cilindros e até 2 carburadores 18.7 18.7
## Valiant Acima de 4 cilindros e até 2 carburadores 36.2 36.2
Outras funções
Função ifelse()
df$class_cyl <- ifelse(df$cyl > 4,
"acima de 4",
"4 ou menos")
table(df$class_cyl)
##
## 4 ou menos acima de 4
## 11 21
df$class_hp <- ifelse(df$hp <= 150,
"até 150",
ifelse(df$hp < 250, "entre 151 e 250", "acima de 250"))
table(df$class_hp)
##
## acima de 250 até 150 entre 151 e 250
## 2 19 11
Função switch()