[R-br] Ajuda com a passagem incorreta de variável string para uma função do R

Cesar Rabak cesar.rabak em gmail.com
Sex Jan 11 23:36:39 -02 2019


Bruno, apenas uma dúvida: como você espera fazer um *merge* em dois
conjuntos de dados cujas "chaves" (no data.table, que um dataframe) as
variáveis ou colunas... ou sendo mais simplório: como você espera que o SW
estatístico *saiba* que  Bolsonaro na data.table  perc_validos é a *mesma
coisa* que 'Jair Bolsonaro' na votos_regiao 🤔??

HTH
--
Cesar Rabak


On Fri, Jan 11, 2019 at 9:17 AM Bruno César Pasquini por (R-br) <
r-br em listas.c3sl.ufpr.br> wrote:

> PessoALL, bom dia!
>
> Estou com dificuldade em passar os valores de uma variável string para uma
> função do R de forma que esta função a interprete corretamente.
>
> Por exemplo, para indicar qual coluna eu quero que a função selecione para
> um cruzamento de 2 data.tables (acho melhor que usar data.frames pela
> melhor performance do data.table)... Eu poderia levar a tabela inteira para
> o cruzamento, mas depois teria que deletar as demais colunas manualmente,
> gostaria de resolver com a função conforme o exemplo abaixo.
>
> Construí este exemplo baseado nos resultados do primeiro turno das últimas
> eleições presidenciais. Normalmente eu importaria as tabelas, mas eu as
> declaro aqui para a devida reprodução do código.
> Fonte:
> https://pt.wikipedia.org/wiki/Resultados_da_eleição_presidencial_no_Brasil_em_2018#Primeiro_turno_3
>
> Meu propósito é entender o que estou fazendo de errado (ou deixando de
> fazer...), não estou propondo um debate político-ideológico que foge ao
> escopo desta lista...
>
> Especificamente, eu não consigo fazer a função "*consolida*" (na verdade
> as versões 1, 2 e 3 desta função) interprete(m) o parâmetro "*Candidato*"
> corretamente.
> Eu tento usar o parâmetro sozinho e com as funções "*substitute*" e "
> *eval*", mas não consigo levar a coluna com os números de votação do
> candidato por região para o cruzamento. Sim, eu sei que o cruzamento como o
> desenhei vai gerar duplicidade, mas o que preciso é que o cruzamento
> "funcione"...
>
> Vocês podem me ajudar a entender o que estou fazendo de errado?
>
> Muito grato pela atenção de cada um(a),
> Bruno César Pasquini
> Estatístico
>
> ####### Codigo Reprodutivel...
>
> library(data.table)
>
> ### Percentual de Votos Validos nos estados e no exterior...
> perc_validos <- data.table(Regiao = c('Centro-Oeste', 'Centro-Oeste',
> 'Centro-Oeste', 'Centro-Oeste', 'Exterior', 'Nordeste', 'Nordeste',
> 'Nordeste', 'Nordeste', 'Nordeste', 'Nordeste', 'Nordeste', 'Nordeste',
> 'Nordeste', 'Norte', 'Norte', 'Norte', 'Norte', 'Norte', 'Norte', 'Norte',
> 'Sudeste', 'Sudeste', 'Sudeste', 'Sudeste', 'Sul', 'Sul', 'Sul'),
>                            Estado = c('Distrito Federal', 'Goias', 'Mato
> Grosso', 'Mato Grosso do Sul', '', 'Alagoas', 'Bahia', 'Ceara', 'Maranhao',
> 'Paraiba', 'Pernambuco', 'Piaui', 'Rio Grande do Norte', 'Sergipe', 'Acre',
> 'Amapa', 'Amazonas', 'Para', 'Rondonia', 'Roraima', 'Tocantins', 'Espirito
> Santo', 'Minas Gerais', 'Rio de Janeiro', 'Sao Paulo', 'Parana', 'Rio
> Grande do Sul', 'Santa Catarina'),
>                            Bolsonaro = c(0.5837, 0.5724, 0.6004, 0.5506,
> 0.5879, 0.3440, 0.2341, 0.2174, 0.2428, 0.3130, 0.3057, 0.1876, 0.3021,
> 0.2721, 0.6224, 0.4074, 0.4348, 0.3619, 0.6224, 0.6297, 0.4464, 0.5476,
> 0.4831, 0.5979, 0.5300, 0.5689, 0.5263, 0.6582),
>                            Haddad = c(0.1187, 0.2186, 0.2476, 0.2387,
> 0.1010, 0.4475, 0.6028, 0.3312, 0.6126, 0.4546, 0.4887, 0.6340, 0.4119,
> 0.5009, 0.1853, 0.3277, 0.4030, 0.4139, 0.2036, 0.1785, 0.4112, 0.2420,
> 0.2765, 0.1469, 0.1642, 0.1970, 0.2281, 0.1513),
>                            Ciro = c(0.1660, 0.0860, 0.0559, 0.0804,
> 0.1452, 0.1012, 0.0941, 0.4095, 0.0839, 0.1675, 0.1356, 0.1142, 0.2231,
> 0.1302, 0.0517, 0.1234, 0.0750, 0.1003, 0.0603, 0.0536, 0.0717, 0.0954,
> 0.1164, 0.1522, 0.1135, 0.0831, 0.1137, 0.0668),
>                            Outros = c(0.1316, 0.1230, 0.0961, 0.1304,
> 0.1659, 0.1072, 0.0690, 0.0419, 0.0606, 0.0650, 0.0700, 0.0642, 0.0631,
> 0.0967, 0.1405, 0.1417, 0.0873, 0.1237, 0.1739, 0.1383, 0.0707, 0.1149,
> 0.1241, 0.1030, 0.1922, 0.1510, 0.1318, 0.1236)
>                            )
> ### Analisando o data.table perc_validos...
> perc_validos; class(perc_validos); str(perc_validos); dim(perc_validos)
>
> ### Total de Votos Validos por regiao e no exterior...
> votos_regiao <- data.table(Regiao = c('Centro-Oeste', 'Exterior',
> 'Nordeste', 'Norte', 'Sudeste', 'Sul'),
>                            'Jair Bolsonaro' = c(4555415, 113690, 7453186,
> 3785038, 23915925, 9453736),
>                            'Fernando Haddad' = c(1642054, 19540, 14583334,
> 3211002, 8623232, 3262843),
>                            'Ciro Gomes' = c(750776, 28073, 4892961,
> 748170, 5425104, 1499282),
>                            'Demais Candidatos' = c(952142, 32078, 1894092,
> 982103, 6968773, 2258047)
>                            )
> ### Analisando o data.table votos_regiao...
> votos_regiao; class(votos_regiao); str(votos_regiao); dim(votos_regiao)
>
> ### Fazendo o cruzamento... Ou pelo menos tentando...
> consolida1 <- function(Candidato) {
>    temporario <- merge(x = perc_validos,
>                        y = votos_regiao[, .(Regiao,
>                                             Candidato)],
>                        by = "Regiao",
>                        all.x = TRUE,
>                        sort = TRUE)
>    return(temporario)
> }
> consolida1(Candidato = "Jair Bolsonaro")
>
> consolida2 <- function(Candidato) {
>    temporario <- merge(x = perc_validos,
>                        y = votos_regiao[, .(Regiao,
>                                             substitute(Candidato))],
>                        by = "Regiao",
>                        all.x = TRUE,
>                        sort = TRUE)
>    return(temporario)
> }
> consolida2(Candidato = "Ciro Gomes")
>
> consolida3 <- function(Candidato) {
>    temporario <- merge(x = perc_validos,
>                        y = votos_regiao[, .(Regiao,
>                                             eval(Candidato))],
>                        by = "Regiao",
>                        all.x = TRUE,
>                        sort = TRUE)
>    return(temporario)
> }
> consolida3(Candidato = "Fernando Haddad")
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20190111/74bcff2d/attachment.html>


Mais detalhes sobre a lista de discussão R-br