Как я могу выбрать пустую переменную для создания перед использованием для в R - PullRequest
0 голосов
/ 23 мая 2019

- это много дней, когда у меня возникают сомнения относительно пустой переменной, которую я должен создать до цикла for.

Я объясняю свою проблему:

Я создал for, который делает меня URL-адресом.Он работает правильно (я не пишу код здесь, потому что он связывается с другими переменными).

В результате получается таблица из одного столбца и шести строк (для простоты я выложил здесь список URL-адресов).

url_web<-(c("https://it.wikipedia.org/wiki/Roma",
            "https://it.wikipedia.org/wiki/Milano",
            "https://it.wikipedia.org/wiki/Napoli",
            "https://it.wikipedia.org/wiki/Torino",
            "https://it.wikipedia.org/wiki/Palermo",
            "https://it.wikipedia.org/wiki/Venezia"))

Моя задача - в данном случае сохранить заголовок страницы.

Для этого я написал этот код.

   dis_1<- data.frame()
for (i in url_web) {
  url_scrap <- i
  url_scrap <- read_html(url_scrap)
  dis <- html_nodes(url_scrap, ".firstHeading")%>% html_text()
  print(distanza_dal)
  dis_1<- rbind(dis_1,dis)
}

Код работает корректно, но я не могу сохранить данные.

R выдает мне эту ошибку.

    Warning messages:
1: In `[<-.factor`(`*tmp*`, ri, value = c(1L, NA)) :
  invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = c(1L, NA, NA)) :
  invalid factor level, NA generated
3: In `[<-.factor`(`*tmp*`, ri, value = c(1L, NA, NA, NA)) :
  invalid factor level, NA generated
4: In `[<-.factor`(`*tmp*`, ri, value = c(1L, NA, NA, NA, NA)) :
  invalid factor level, NA generated
5: In `[<-.factor`(`*tmp*`, ri, value = c(1L, NA, NA, NA, NA, NA)) :
  invalid factor level, NA generated 

Кто-то, любезно, может объяснить мне, где моя ошибка, и общие правила, которым я должен следовать, чтобы избежать ошибок в будущем, как это.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Проблема, с которой вы сталкиваетесь, заключается в том, что строки символов, которые вы читаете, преобразуются в factor, что вызывает предупреждения.

См. Эту упрощенную версию вашего вопроса:

dis_1 <- data.frame()
dis_1 <- rbind(dis_1, "a")
dis_1 <- rbind(dis_1, "b") 

Это генерирует предупреждение.Чтобы обойти это, используйте stringsAsFactors = F внутри rbind и внутри data.frame:

dis_1 <- data.frame(stringsAsFactors = F)
dis_1 <- rbind(dis_1, "a", stringsAsFactors = F)
dis_1 <- rbind(dis_1, "b", stringsAsFactors = F)
1 голос
/ 23 мая 2019

это должно быть рабочее решение для вас, если вы просто хотите заголовок страницы:

#as a general matter you should declare which packages you are using

library(rvest)
library(xml2)

dis_1 <- data.frame()

#you need to run through all elements of your vector one at a time
for (i in 1:length(url_web)) {
       #read in the HTML
      url_scrap <- read_html(url_web[i])
        #extract the relevant chunks
      dis <- html_nodes(url_scrap, ".firstHeading") %>% 
        html_text()
        #make a new data frame with the title info you were looking for
      dis2 <- data.frame(page_title = dis)
        #join it to the main data frame
      dis_1 <- rbind(dis_1,dis2)
    }

Возвращаемые значения:

  page_title
1       Roma
2     Milano
3     Napoli
4     Torino
5    Palermo
6    Venezia
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...