Olá! Tudo bem com vocês? Espero que sim.
Eu tenho uma dúvida em R. Considere o seguinte df
:
df_1 <- data.frame(
x = c(0, 1, 0, 2, 0),
y = c(0, 2, 1, 2, 1),
z = c(0, 2, 1, 2, 1)
)
Considere a função abaixo:
lapply(X = df_1, FUN = sum, na.rm = TRUE)
#$x
#[1] 3
#$y
#[1] 6
#$z
#[1] 6
Ela funciona. Considere esta função agora:
lapply(X = df_1, FUN = function(x) {
ifelse(test = x >= 1, yes = 'OK', no = 'NO_OK')
})
#$x
#[1] "NO_OK" "OK" "NO_OK" "OK" "NO_OK"
#$y
#[1] "NO_OK" "OK" "OK" "OK" "OK"
#$z
#[1] "NO_OK" "OK" "OK" "OK" "OK"
Tudo bem também. Mas, eu gostaria de saber como ajustar esta segunda função (com ifelse
) com a estrutura da primeira função (com sum
). Algo como:
lapply(X = df_1, FUN = ifelse, df_1 >= 1, yes = 'OK', no = 'NO_OK')
Se não tiver como, qual é a explicação teórica para isso?
Ainda sobre o uso de ifelse
, considere o código abaixo:
library(purrr)
library(dplyr)
df_1 %>%
mutate(var = pmap_chr(., lift_vd(function(x) if_else(n_distinct(x) == 1, "ok", "nok"))))
# x y z var
#1 0 0 0 ok
#2 1 2 2 nok
#3 0 1 1 nok
#4 2 2 2 ok
#5 0 1 1 nok
Funciona. Mas, com uso do operador ~
na frente de if_else
não:
df_1 %>%
mutate(var = pmap_chr(., lift_vd(~ if_else(n_distinct(.) == 1, "ok", "nok"))))
Mas o ~
não seria um substituto para function(x) {if_else(...)}
? O que ocorre neste caso?
Obrigado pela atenção.