From cc9d943fb5821b7db3123b5d5f325d0d143481e4 Mon Sep 17 00:00:00 2001 From: Diego H Date: Fri, 12 Apr 2024 12:45:43 +0000 Subject: [PATCH 1/4] Make senadores iterative --- R/composicion.R | 55 ++++++++++++++++++++--------- README.md | 42 +++++++++++----------- man/figures/README-senadoras-1.png | Bin 22065 -> 21963 bytes vignettes/senadoRES.Rmd | 3 +- 4 files changed, 60 insertions(+), 40 deletions(-) diff --git a/R/composicion.R b/R/composicion.R index a7d7ae8..d157929 100644 --- a/R/composicion.R +++ b/R/composicion.R @@ -42,21 +42,42 @@ grupos <- function(legislatura){ #' head(senadores()) #' } senadores <- function() { - x <- read_xml(compose_url(tipoFich = 10)) - s <- data.frame(nombre = xml_text(xml_find_all(x, "//senador/nombre")), - apellidos = xml_text(xml_find_all(x, "//senador/apellidos")), - legislatura = as.numeric(xml_text(xml_find_all(x, "//senador/legislatura"))), - ultCredencial = xml_text(xml_find_all(x, "//senador/ultCredencial")), - procedTipo = xml_text(xml_find_all(x, "//senador/procedTipo")), - procedLiteral = xml_text(xml_find_all(x, "//senador/procedLiteral")), - procedLugar = xml_text(xml_find_all(x, "//senador/procedLugar")), - grupoCod = xml_text(xml_find_all(x, "//senador/grupoCod")), - grupoSiglas = xml_text(xml_find_all(x, "//senador/grupoSiglas")), - grupoNombre = xml_text(xml_find_all(x, "//senador/grupoNombre"))) - s$procedLugar <- gsub(pattern = ".+: ", "", s$procedLugar) - s$grupoCod <- gsub(pattern = ".+: ", "", s$grupoCod) - s$sex <- NA - s$sex[endsWith(s$procedLiteral, "a")] <- "female" - s$sex[endsWith(s$procedLiteral, "o")] <- "male" - s + # Iterate through legislaturas + + # Up to 20 + legislat <- seq(1, 20) + senad_list <- lapply(legislat, function(x) { + # Try and in error return NULL + df <- try(senadores_lappl(x), silent = TRUE) + if (inherits(df, "try-error")) df <- NULL + df + }) + + # Clean null, bind and dedupe + senad_list <- senad_list[lengths(senad_list) > 0] + senad_df <- do.call(rbind, senad_list) + unique(senad_df) +} + +# Converted from senadores, iterator +senadores_lappl <- function(legislatura) { + x <- read_xml(compose_url(tipoFich = 10, legis = legislatura)) + s <- data.frame( + nombre = xml_text(xml_find_all(x, "//senador/nombre")), + apellidos = xml_text(xml_find_all(x, "//senador/apellidos")), + legislatura = as.numeric(xml_text(xml_find_all(x, "//senador/legislatura"))), + ultCredencial = xml_text(xml_find_all(x, "//senador/ultCredencial")), + procedTipo = xml_text(xml_find_all(x, "//senador/procedTipo")), + procedLiteral = xml_text(xml_find_all(x, "//senador/procedLiteral")), + procedLugar = xml_text(xml_find_all(x, "//senador/procedLugar")), + grupoCod = xml_text(xml_find_all(x, "//senador/grupoCod")), + grupoSiglas = xml_text(xml_find_all(x, "//senador/grupoSiglas")), + grupoNombre = xml_text(xml_find_all(x, "//senador/grupoNombre")) + ) + s$procedLugar <- gsub(pattern = ".+: ", "", s$procedLugar) + s$grupoCod <- gsub(pattern = ".+: ", "", s$grupoCod) + s$sex <- NA + s$sex[endsWith(s$procedLiteral, "a")] <- "female" + s$sex[endsWith(s$procedLiteral, "o")] <- "male" + s } diff --git a/README.md b/README.md index b62d77c..a907f00 100644 --- a/README.md +++ b/README.md @@ -50,27 +50,27 @@ This function return the members of the Senate: ``` r ts <- senadores() head(ts) -#> nombre apellidos legislatura ultCredencial procedTipo -#> 1 FERNANDO ABAD BÉCQUER 5 260 D -#> 2 ENRIQUE ABAD BENEDICTO 10 034 E -#> 3 ELISABET ABAD GIRALT 12 051 D -#> 4 JOSÉ ANTONIO ABAD LÓPEZ-BREA 3 039 E -#> 5 PATRICIA ABASCAL JIMÉNEZ 14 199 E -#> 6 ADOLFO ABEJÓN ORTEGA 9 081 E -#> procedLiteral procedLugar grupoCod grupoSiglas -#> 1 Designado Asamblea de Madrid Asamblea de Madrid 800 -#> 2 Electo Sevilla Sevilla 800 -#> 3 Designada Parlamento de Cataluña Parlamento de Cataluña 807 -#> 4 Electo Zamora Zamora CP -#> 5 Electa Eivissa-Formentera Eivissa-Formentera 800 -#> 6 Electo Valladolid Valladolid 801 -#> grupoNombre sex -#> 1 GPS male -#> 2 GPS male -#> 3 GPN female -#> 4 GPCP male -#> 5 GPS female -#> 6 GPP male +#> nombre apellidos legislatura ultCredencial procedTipo +#> 1 FERNANDO ABAD BÉCQUER 5 260 D +#> 2 ENRIQUE ABAD BENEDICTO 10 034 E +#> 3 ELISABET ABAD GIRALT 12 051 D +#> 4 JOSÉ ANTONIO ABAD LÓPEZ-BREA 3 039 E +#> 5 ADOLFO ABEJÓN ORTEGA 9 081 E +#> 6 FRANCISCO ABELLÁN MARTÍNEZ 9 242 D +#> procedLiteral procedLugar grupoCod +#> 1 Designado Asamblea de Madrid Asamblea de Madrid +#> 2 Electo Sevilla Sevilla +#> 3 Designada Parlamento de Cataluña Parlamento de Cataluña +#> 4 Electo Zamora Zamora +#> 5 Electo Valladolid Valladolid +#> 6 Designado Asamblea Regional de Murcia Asamblea Regional de Murcia +#> grupoSiglas grupoNombre sex +#> 1 800 GPS male +#> 2 800 GPS male +#> 3 807 GPN female +#> 4 CP GPCP male +#> 5 801 GPP male +#> 6 800 GPS male ``` We can see the increase of females on the Senate along the legislatures: diff --git a/man/figures/README-senadoras-1.png b/man/figures/README-senadoras-1.png index c2247df6ad9d8fc0e8294f5448177167910b844d..96c5348b96ecf43ee0c3a8aa29fde1c04de1ded6 100644 GIT binary patch literal 21963 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 As{jB1 literal 22065 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 diff --git a/vignettes/senadoRES.Rmd b/vignettes/senadoRES.Rmd index dd283b2..0f04cce 100644 --- a/vignettes/senadoRES.Rmd +++ b/vignettes/senadoRES.Rmd @@ -45,8 +45,7 @@ ts %>% scale_y_continuous(breaks = seq(from = 0, to = 0.7, by = .1), expand = expansion(add = c(0, 0.01)), limits = c(0, NA)) + theme_minimal() + - labs(title = "Ratio of women", x = "Legislatura", y = "Ratio of women") + - guides(col = FALSE, shape = FALSE) + labs(title = "Ratio of women", x = "Legislatura", y = "Ratio of women") ``` From 34efd0d4542b8c93cf1aeca447cb6821890fb5de Mon Sep 17 00:00:00 2001 From: Diego H Date: Fri, 12 Apr 2024 13:26:35 +0000 Subject: [PATCH 2/4] Update actions --- .github/workflows/R-CMD-check.yaml | 3 +- .github/workflows/roscron-check-standard.yaml | 86 ------------------- .github/workflows/rostemplate-gh-pages.yaml | 10 ++- .github/workflows/test-coverage.yaml | 8 +- R/composicion.R | 4 +- vignettes/senadoRES.Rmd | 4 +- 6 files changed, 16 insertions(+), 99 deletions(-) delete mode 100644 .github/workflows/roscron-check-standard.yaml diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index a3ac618..14159b7 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -29,7 +29,7 @@ jobs: R_KEEP_PKG_SOURCE: yes steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: r-lib/actions/setup-pandoc@v2 @@ -47,3 +47,4 @@ jobs: - uses: r-lib/actions/check-r-package@v2 with: upload-snapshots: true + build_args: 'c("--no-manual","--compact-vignettes=gs+qpdf")' diff --git a/.github/workflows/roscron-check-standard.yaml b/.github/workflows/roscron-check-standard.yaml deleted file mode 100644 index a8a6caa..0000000 --- a/.github/workflows/roscron-check-standard.yaml +++ /dev/null @@ -1,86 +0,0 @@ -# For help debugging build failures open an issue on the RStudio community with the 'github-actions' tag. -# https://community.rstudio.com/new-topic?category=Package%20development&tags=github-actions -on: - push: - branches: - - main - - master - pull_request: - branches: - - main - - master - schedule: - - cron: '30 08 1 * *' - -name: R-CMD-check - -jobs: - R-CMD-check: - runs-on: ${{ matrix.config.os }} - - name: ${{ matrix.config.os }} (${{ matrix.config.r }}) - - strategy: - fail-fast: false - matrix: - config: - - {os: windows-latest, r: 'release'} - - {os: macOS-latest, r: 'release'} - - {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} - - {os: ubuntu-20.04, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} - - env: - R_REMOTES_NO_ERRORS_FROM_WARNINGS: true - RSPM: ${{ matrix.config.rspm }} - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - - steps: - - uses: actions/checkout@v2 - - - uses: r-lib/actions/setup-r@master - with: - r-version: ${{ matrix.config.r }} - - - uses: r-lib/actions/setup-pandoc@master - - - name: Query dependencies - run: | - install.packages('remotes') - saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) - writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") - shell: Rscript {0} - - - name: Cache R packages - if: runner.os != 'Windows' - uses: actions/cache@v2 - with: - path: ${{ env.R_LIBS_USER }} - key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} - restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- - - - name: Install system dependencies - if: runner.os == 'Linux' - run: | - while read -r cmd - do - eval sudo $cmd - done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "20.04"))') - - - name: Install dependencies - run: | - remotes::install_deps(dependencies = TRUE) - remotes::install_cran("rcmdcheck") - shell: Rscript {0} - - - name: Check - env: - _R_CHECK_CRAN_INCOMING_REMOTE_: false - run: rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "warning", check_dir = "check") - shell: Rscript {0} - - - name: Upload check results - if: failure() - uses: actions/upload-artifact@main - with: - name: ${{ runner.os }}-r${{ matrix.config.r }}-results - path: check diff --git a/.github/workflows/rostemplate-gh-pages.yaml b/.github/workflows/rostemplate-gh-pages.yaml index c89cc3c..3b4bde5 100644 --- a/.github/workflows/rostemplate-gh-pages.yaml +++ b/.github/workflows/rostemplate-gh-pages.yaml @@ -1,11 +1,13 @@ # Workflow derived from https://github.com/r-lib/actions/tree/master/examples # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: + workflow_dispatch: push: branches: [main, master] tags: ['*'] name: rostemplate-gh-pages +permissions: write-all jobs: rostemplate-gh-pages: @@ -13,7 +15,7 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: r-lib/actions/setup-pandoc@v2 @@ -31,6 +33,6 @@ jobs: - name: Deploy package run: | - git config --local user.name "$GITHUB_ACTOR" - git config --local user.email "$GITHUB_ACTOR@users.noreply.github.com" - Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE, run_dont_run = TRUE)' + git config --local user.name "github-actions[bot]" + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE, clean = TRUE, run_dontrun = TRUE)' diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index 2c5bb50..21b8a93 100644 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -15,7 +15,7 @@ jobs: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: r-lib/actions/setup-r@v2 with: @@ -31,7 +31,7 @@ jobs: covr::codecov( quiet = FALSE, clean = FALSE, - install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package") + install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package") ) shell: Rscript {0} @@ -39,12 +39,12 @@ jobs: if: always() run: | ## -------------------------------------------------------------------- - find ${{ runner.temp }}/package -name 'testthat.Rout*' -exec cat '{}' \; || true + find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true shell: bash - name: Upload test results if: failure() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage-test-failures path: ${{ runner.temp }}/package diff --git a/R/composicion.R b/R/composicion.R index d157929..dd67478 100644 --- a/R/composicion.R +++ b/R/composicion.R @@ -44,8 +44,8 @@ grupos <- function(legislatura){ senadores <- function() { # Iterate through legislaturas - # Up to 20 - legislat <- seq(1, 20) + # Up to 24 (opinionated, since 1978 there are 14 as of 2024) + legislat <- seq(1, 24) senad_list <- lapply(legislat, function(x) { # Try and in error return NULL df <- try(senadores_lappl(x), silent = TRUE) diff --git a/vignettes/senadoRES.Rmd b/vignettes/senadoRES.Rmd index 0f04cce..ac3f973 100644 --- a/vignettes/senadoRES.Rmd +++ b/vignettes/senadoRES.Rmd @@ -106,7 +106,7 @@ sessions <- do.call(rbind, s) ggplot(sessions) + stat_sum(aes(sesionLegislatura, sesionHoraInicio, fill = after_stat(n), size = 1), geom = "tile") + - guides(size = FALSE) + + guides(size = "none") + theme_minimal() + labs(title = "Hour of sessions", x = "Legislature", y = "Starting hour", fill = "Sessions") + @@ -118,7 +118,7 @@ So most of the times they meet at the afternoon. If you want more detailed information of each session you can use the fichUrlDetalleSesion details: ```{r detalles} -details <- detalles(paste0("https://www.senado.es", sessions$fichUrlDetalleSesion[1])) +details <- detalles(paste0("https://www.senado.es", sessions$fichUrlDetalleSesion[3])) details[1:5, c("asunto_id", "asunto_hora_inicio", "asunto_hora_fin", "punto_literal", "intervencion_orador_desc", "intervencion_orador_idWeb")] ``` From bc193e6118dab490b1488a71291a4776bd0bef22 Mon Sep 17 00:00:00 2001 From: Diego H Date: Fri, 12 Apr 2024 13:38:49 +0000 Subject: [PATCH 3/4] Fix typos --- .github/workflows/rostemplate-gh-pages.yaml | 2 +- DESCRIPTION | 3 +-- R/comisiones_ponencias.R | 2 +- R/diario.R | 2 +- R/votos.R | 2 ++ man/comisiones.Rd | 2 +- man/sumario.Rd | 2 +- man/votos.Rd | 2 ++ 8 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/rostemplate-gh-pages.yaml b/.github/workflows/rostemplate-gh-pages.yaml index 3b4bde5..191b8ed 100644 --- a/.github/workflows/rostemplate-gh-pages.yaml +++ b/.github/workflows/rostemplate-gh-pages.yaml @@ -35,4 +35,4 @@ jobs: run: | git config --local user.name "github-actions[bot]" git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" - Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE, clean = TRUE, run_dontrun = TRUE)' + Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE, clean = TRUE, run_dont_run = TRUE)' diff --git a/DESCRIPTION b/DESCRIPTION index e888eca..d8c8cf6 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -31,6 +31,5 @@ VignetteBuilder: knitr Encoding: UTF-8 Language: en-US -LazyData: true Roxygen: list(markdown = TRUE) -RoxygenNote: 7.2.3 +RoxygenNote: 7.3.1 diff --git a/R/comisiones_ponencias.R b/R/comisiones_ponencias.R index 5fd445c..01964f2 100644 --- a/R/comisiones_ponencias.R +++ b/R/comisiones_ponencias.R @@ -1,7 +1,7 @@ #' *Comisiones* #' #' Look up the *comisiones* and *ponencias* of a legislature. -#' Rellevant to know the code of the work groups. +#' Relevant to know the code of the work groups. #' @inheritParams plenarias #' @return A `data.frame` with the *comisiones* and *ponencias* of that legislature. #' @export diff --git a/R/diario.R b/R/diario.R index 68046fb..faf05e4 100644 --- a/R/diario.R +++ b/R/diario.R @@ -1,7 +1,7 @@ #' Retrieve the document of _sumario_ #' #' Returns the summary of a session in a tidy way. -#' If multiple autors are involved in a disposicion and multiple documents they +#' If multiple authors are involved in a disposition and multiple documents they #' get mixed. #' @param cve The character of the CVE of the document. #' @return A data.frame with a summary of the session, date, documents, authors. diff --git a/R/votos.R b/R/votos.R index 64d0b66..3cd459b 100644 --- a/R/votos.R +++ b/R/votos.R @@ -7,8 +7,10 @@ #' @returns A votos class with information about who voted what. #' @export #' @examples +#' \donttest{ #' votos_64 <- votos(14, 64) #' votos_3_8 <- votos(14, 3, 8) +#' } votos <- function(legislatura, sesion, votacion = NULL) { # if (!endsWith(x, ".xml")) { # url <- paste0(force(BASE_URL), x) diff --git a/man/comisiones.Rd b/man/comisiones.Rd index d7ce507..f27c057 100644 --- a/man/comisiones.Rd +++ b/man/comisiones.Rd @@ -14,7 +14,7 @@ A \code{data.frame} with the \emph{comisiones} and \emph{ponencias} of that legi } \description{ Look up the \emph{comisiones} and \emph{ponencias} of a legislature. -Rellevant to know the code of the work groups. +Relevant to know the code of the work groups. } \examples{ if (interactive()) { diff --git a/man/sumario.Rd b/man/sumario.Rd index 1dbfa5b..4be3a90 100644 --- a/man/sumario.Rd +++ b/man/sumario.Rd @@ -14,7 +14,7 @@ A data.frame with a summary of the session, date, documents, authors. } \description{ Returns the summary of a session in a tidy way. -If multiple autors are involved in a disposicion and multiple documents they +If multiple authors are involved in a disposition and multiple documents they get mixed. } \examples{ diff --git a/man/votos.Rd b/man/votos.Rd index 2c1e97c..d09463e 100644 --- a/man/votos.Rd +++ b/man/votos.Rd @@ -20,6 +20,8 @@ A votos class with information about who voted what. Retrieve votes in a sesion. } \examples{ +\donttest{ votos_64 <- votos(14, 64) votos_3_8 <- votos(14, 3, 8) } +} From 038791e2598244123476592b241c85eecf946ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs?= Date: Sat, 13 Apr 2024 13:10:24 +0200 Subject: [PATCH 4/4] More flexible call and check input parameters --- R/composicion.R | 67 ++++++++++++++++++++++-------------------------- man/senadores.Rd | 7 +++-- 2 files changed, 35 insertions(+), 39 deletions(-) diff --git a/R/composicion.R b/R/composicion.R index dd67478..d8bce8a 100644 --- a/R/composicion.R +++ b/R/composicion.R @@ -33,51 +33,44 @@ grupos <- function(legislatura){ #' #' Past and current appointed members. #' @return A `data.frame` with the information available. +#' @inheritParams plenarias #' @importFrom xml2 read_xml #' @importFrom xml2 xml_text #' @importFrom xml2 xml_find_all #' @export #' @examples #' if (interactive()) { -#' head(senadores()) +#' head(senadores(12)) #' } -senadores <- function() { - # Iterate through legislaturas - - # Up to 24 (opinionated, since 1978 there are 14 as of 2024) - legislat <- seq(1, 24) - senad_list <- lapply(legislat, function(x) { - # Try and in error return NULL - df <- try(senadores_lappl(x), silent = TRUE) - if (inherits(df, "try-error")) df <- NULL - df - }) - - # Clean null, bind and dedupe - senad_list <- senad_list[lengths(senad_list) > 0] - senad_df <- do.call(rbind, senad_list) - unique(senad_df) +senadores <- function(legislatura = 12:14) { + stopifnot(!is.numeric(legislatura) || all(legislatura >= 0) || !is.null(legislatura)) + senad_list <- lapply(legislatura, senadores_legis) + senad_df <- do.call(rbind, senad_list) + # The API return the same data twice + # Even there is a person LÓPEZ CONDÉS Legis = 3, ultCredencial 284 that is + # returned with accent and without it. + unique(senad_df) } # Converted from senadores, iterator -senadores_lappl <- function(legislatura) { - x <- read_xml(compose_url(tipoFich = 10, legis = legislatura)) - s <- data.frame( - nombre = xml_text(xml_find_all(x, "//senador/nombre")), - apellidos = xml_text(xml_find_all(x, "//senador/apellidos")), - legislatura = as.numeric(xml_text(xml_find_all(x, "//senador/legislatura"))), - ultCredencial = xml_text(xml_find_all(x, "//senador/ultCredencial")), - procedTipo = xml_text(xml_find_all(x, "//senador/procedTipo")), - procedLiteral = xml_text(xml_find_all(x, "//senador/procedLiteral")), - procedLugar = xml_text(xml_find_all(x, "//senador/procedLugar")), - grupoCod = xml_text(xml_find_all(x, "//senador/grupoCod")), - grupoSiglas = xml_text(xml_find_all(x, "//senador/grupoSiglas")), - grupoNombre = xml_text(xml_find_all(x, "//senador/grupoNombre")) - ) - s$procedLugar <- gsub(pattern = ".+: ", "", s$procedLugar) - s$grupoCod <- gsub(pattern = ".+: ", "", s$grupoCod) - s$sex <- NA - s$sex[endsWith(s$procedLiteral, "a")] <- "female" - s$sex[endsWith(s$procedLiteral, "o")] <- "male" - s +senadores_legis <- function(legislatura) { + x <- read_xml(compose_url(tipoFich = 10, legis = legislatura)) + s <- data.frame( + nombre = xml_text(xml_find_all(x, "//senador/nombre")), + apellidos = xml_text(xml_find_all(x, "//senador/apellidos")), + legislatura = as.numeric(xml_text(xml_find_all(x, "//senador/legislatura"))), + ultCredencial = xml_text(xml_find_all(x, "//senador/ultCredencial")), + procedTipo = xml_text(xml_find_all(x, "//senador/procedTipo")), + procedLiteral = xml_text(xml_find_all(x, "//senador/procedLiteral")), + procedLugar = xml_text(xml_find_all(x, "//senador/procedLugar")), + grupoCod = xml_text(xml_find_all(x, "//senador/grupoCod")), + grupoSiglas = xml_text(xml_find_all(x, "//senador/grupoSiglas")), + grupoNombre = xml_text(xml_find_all(x, "//senador/grupoNombre")) + ) + s$procedLugar <- gsub(pattern = ".+: ", "", s$procedLugar) + s$grupoCod <- gsub(pattern = ".+: ", "", s$grupoCod) + s$sex <- NA + s$sex[endsWith(s$procedLiteral, "a")] <- "female" + s$sex[endsWith(s$procedLiteral, "o")] <- "male" + s } diff --git a/man/senadores.Rd b/man/senadores.Rd index e40279d..9a75f88 100644 --- a/man/senadores.Rd +++ b/man/senadores.Rd @@ -4,7 +4,10 @@ \alias{senadores} \title{Senators since 1977} \usage{ -senadores() +senadores(legislatura = 12:14) +} +\arguments{ +\item{legislatura}{A numeric value above 12 (No information prior to then).} } \value{ A \code{data.frame} with the information available. @@ -14,6 +17,6 @@ Past and current appointed members. } \examples{ if (interactive()) { - head(senadores()) + head(senadores(12)) } }