Функция зацикливания на диапазоне, который меняется каждый год - PullRequest
2 голосов
/ 19 апреля 2020

ПРОЕКТ - сбор топи c информации из решений Высокого суда Австралии, опубликованных в Интернете для анализа тенденций во времени.

ТЕКУЩАЯ ПРОБЛЕМА - попытка повторить 'case_importer 'Функция (которая возвращает соответствующие символьные строки из решений) за каждый год количество раз, равное числу дел, решенных в этом году.

Я могу достичь этого вручную, используя для l oop, который выполняет итерацию столько раз, сколько было случаев каждый год - например, с использованием 2020 (в котором до сих пор было 14 случаев):

for (i in 14) {
  hc_cases_2020_list[[i]] <- case_importer(2020, i)
}

Однако я бы не стал переписывать количество итераций для каждого года вручную .

Я сохранил количество обращений за год в листе Excel с именем hc_cases_per_year, который имеет два столбца, year и num_cases, и создал функцию, которая дает значение num_cases с помощью год ввода.

Любой совет в решении конкретной проблемы c или выборе лучшего подхода был бы за пределами оценки. ed.

Мой код ниже - спасибо, что нашли время, чтобы прочитать!


library(rvest)
library(dplyr)
library(readxl)

# Function to import html data and turn it into text

html_to_text <- function(url) {
  url %>%
    read_html %>%
    html_nodes("li , p , blockquote , b , h2") %>%
    html_text
}

# Function to extract topic paragraphs using grep

grep_topics <- function(text) {
  grep("^\\n?(:?\\w+\\s)+\\(?C?t?h?\\)?\\s?–.*", text, perl = TRUE, value = TRUE)
}

# Function to wrap the above funtions into a single function that takes year and case number

case_importer <- function(year, case_num) {
  url <- url_maker(year, case_num)
  text <- html_to_text(url)
  grep_topics(text)
}```

# Function + command to create empty list for each year

list_namer <- function(year) {
  assign(paste0("hc_cases_", year, "_list", sep = ""), list(), envir = .GlobalEnv)
}

for (i in 1948:2020) {
  list_namer(i)
}

# Function to change list to dataframe 

list_to_df <- function(list) {
  num_obs <- sapply(list, length)
  seq_max <- seq_len(max(num_obs))
  t(sapply(list, "[", i = seq_max))
}

# Function to return number of cases in given year

cases_in_year <- function(year) {
  hc_cases_per_year$num_cases[year - 1947]
}

# Function to create a URL for any given year and case number

url_maker <- function(year, case_num) {
  paste("http://classic.austlii.edu.au/au/cases/cth/HCA/", year, "/", case_num, ".html", sep = "")
}

# Importing hc_cases_per_year

hc_cases_per_year <- read_excel("PATH/hc_cases_per_year.xlsx")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...