Чтение узлов из нескольких HTML и сохранение результата в виде вектора - PullRequest
0 голосов
/ 18 мая 2018

У меня есть список локально сохраненных файлов HTML.Я хочу извлечь несколько узлов из каждого HTML и сохранить результаты в векторе.После этого я хотел бы объединить их в массив данных.Теперь у меня есть фрагмент кода для 1 узла, который работает (см. Ниже), но он кажется довольно длинным и неэффективным, если я применяю его для ~ 20 переменных.Кроме того, что-то действительно странное с сохранением в векторе (XXX_name) начинается с последнего наблюдения, а затем продолжается с первого, второго ... У вас есть предложения по упрощению кода / повышению его эффективности?

# Extracts name variable and stores in a vector 
XXX_name <- c()
for (i in 1:216) { 
  XXX_name <- c(XXX_name, name)
  mydata <- read_html(files[i], encoding = "latin-1") 
  reads_name <- html_nodes(mydata, 'h1') 
  name <- html_text(reads_name) 
  #print(i) 
  #print(name) 
}

Большое спасибо!

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете поместить работу внутри функции, а затем применить эту функцию к каждой из ваших переменных с помощью map

Сначала создайте функцию:

read_names <- function(var, node) {

  mydata <- read_html(files[var], encoding = "latin-1") 
  reads_name <- html_nodes(mydata, node) 
  name <- html_text(reads_name) 
}

Затем мы создадим dfсо всеми возможными комбинациями входов и применить функцию к этому

library(tidyverse)

inputs <- crossing(var = 1:216, node = vector_of_nodes) 

output <- map2(inputs$var, inputs$node, read_names)
...