【发布时间】:2020-11-13 08:59:38
【问题描述】:
我在 R 中工作,并使用 map_df 通过一个提取数据的函数来循环应用程序。
我循环浏览了大约 750 个应用程序,并且对于大多数应用程序它都有效。但有时 R 会抛出错误(维数不正确),并且循环中止。
我想知道是否有办法修改我的代码,以便在发生此类错误时循环不会中止?我想继续前进并继续使用有效的应用程序构建数据集。
library(pdftools)
library(tidyverse)
library(tesseract)
library(reshape2)
#Function to read data from pdf application
fyh_pdf <- function(pdf) {
pdf <- pdftools::pdf_text(pdf)
string <- paste0(pdf, collapse = "")
steg1 <- str_extract_all(string,
regex("(?<=Arbetslivets medverkan i utbildningens planering och genomförande).+?(?=Organisation och ledning av utbildningen)",
dotall = TRUE,ignore_case = TRUE))[[1]]
steg2 <- str_match_all(steg1, regex("Organisationsnamn: *([^\\r\\n]+?)\\r\\n.*?Insatt: *([^\\r\\n]+?)\\r\\n.*?Medverkan planering: *([^\\r\\n]+?)\\r\\n.*?Uppskattat anställningsbehov: *([^\\r\\n]+?)\\r\\n.*?Andra rekryteringsvägar: *([^\\r\\n]+?)\\r\\n.*?LIA-platser: *([^\\r\\n]+?)\\r\\n.*?Medfinansiering: *([^\\r\\n]+?)\\r\\n.*?Status: *([^\\r\\n]+?)\\r\\n",
dotall=T))[[1]][,-1]
df <- tibble(utbildning_namn = str_extract(string, regex("(?<=Utbildningens namn:\r\n).*")),
utbildning_anordnare = str_extract(string, regex("(?<=Ansvarig utbildningsanordnare:\r\n).*")),
ansökningsnummer = str_extract(string, regex("(?<=Ansökningsnummer:\r\n).*")),
organisationsnamn=steg2[,1], insatt=steg2[,2], medverkan_planering=steg2[,3], uppskattat_anställningsbehov=steg2[,4],
andra_rekryteringsvägar=steg2[,5], LIA_platser=steg2[,6], medfinansiering=steg2[,7], status=steg2[,8]) %>%
mutate(utbildning_namn = str_trim(utbildning_namn, side = "left"),
utbildning_anordnare = str_trim(utbildning_anordnare, side = "left"),
ansökningsnummer = str_trim(ansökningsnummer, side = "left"))
return(df)
}
#Let's loop!
setwd("H:/R/YH_ANSÖKNINGAR/YH_2018/")
filenames <- list.files(path = "H:/R/YH_ANSÖKNINGAR/YH_2018/") %>%
str_subset(pattern="_Ans_")
df <- map_df(.x = filenames, ~fyh_pdf(pdf = .x))
【问题讨论】:
-
看看
purrr::safely或purrr::possibly。