Função para converter valores

Pessoal, fiz a função (abaixo) para poder converter valores de moedas antigas em Reais (R$). Para isso tentei atribuir uma “new_valor”, que receberia os valores convertidos, mas não funcionou porque os valores gerados em “new_valor” são os mesmos da coluna de origem. Ou seja, não foram calculados, apenas foram copiados. O que devo fazer para corrigir isso? Ps.: se quiserem ver a função no github:

library(dplyr)

load(“df_arrec.rda”)

converter <- function(moeda, valor, x = 1000, y= 2.75, z=1.0641){
if(moeda == “UFIR”){
new_valor <- valor * z # Valor da ufir em 12/2020
} else if (moeda == “OTN”){
(( new_valor <-valor * 6.17 * 126.8621)/597.06) * z
} else if (moeda == “BTN”){
((new_valor <- valor * 126.8621)/597.06) * z
} else if (moeda == “MVR”){
new_valor <- valor * 63.49 # Valor da MVR em reais
} else if(moeda == “Cruzeiro (70 a 86)”){
new_valor <- valor / y * x^4
} else if (moeda == “Cruzado”){
new_valor <- valor / y * x^3
} else if (moeda == “Cruzado Novo”){
new_valor <- valor / y * x^2
} else if (moeda == “Cruzeiro (90 a 93)”){
new_valor <- valor / y * x^2
} else if(moeda == “Cruzeiro Real”){
new_valor <- valor / y * x
} else if (moeda == “Real”){
new_valor <- valor
}
df <- tibble(df_arrec$valorAuto, valor, moeda, new_valor)
return(df)
}

atribuindo objeto para conferir resultado

teste <- converter(moeda = df_arrec$moeda, df_arrec$valorAuto)

conferindo resultado da funcao

teste %>% View()

Olá @cneto, tudo bem?

Me parece que sua função não é vetorizada. Por isso, é importante que ela receba os valores um de cada vez. Minha sugestão é fazer 2 passos

  1. Verifique se converter() de fato está funcionando para exemplos de tamanho 1

Exemplo: converter("UFIR", 10) precisa funcionar.

  1. Troque a saída da sua função para somente return(new_valor), sem criar uma tibble.

  2. Obtenha os resultados usando {purrr}

Exemplo: convertido <- purrr::map2_dbl(df_arrec$moeda, df_arrec$valorAuto, converter)

Se quiser adicionar como coluna da sua tibble, você pode fazer

df_arrec_convertido <- df_arrec %>%
  dplyr::mutate(convertido = purrr::map2_dbl(moeda, valorAuto, converter))

(não testei os códigos sugeridos)

Espero ter ajudado!

2 Curtidas

Julio, muito obrigado. Vou testar as mudanças que você propôs, e aviso aqui sobre o que ocorrer. ABraçao!

Júlio, deu certo! Suas sugestões foram certeiras. Para além disso, eu também corrigi algumas coisas na formula. Muito obrigado!