Ошибка атомарного вектора при использовании пакета R `stringr`

Я хочу использовать пакеты rvest для получения цен на бензин с веб-страницы. Однако я не могу вытащить числовые значения и должен вытащить html-класс .sp_p.

library(rvest)
desmoines <- html("http://www.desmoinesgasprices.com/")

Вытяните цены на газ:

price <- desmoines %>%
  html_nodes(".sp_p")

head(price, 3)

Выход:

[[1]]
<div class="sp_p">
  <div class="p2"></div>
  <div class="pd"></div>
  <div class="p5"></div>
  <div class="p5"></div>
</div> 

[[2]]
<div class="sp_p">
  <div class="p2"></div>
  <div class="pd"></div>
  <div class="p5"></div>
  <div class="p6"></div>
</div> 

[[3]]
<div class="sp_p">
  <div class="p2"></div>
  <div class="pd"></div>
  <div class="p5"></div>
  <div class="p7"></div>
</div> 

attr(,"class")
[1] "XMLNodeSet"

Теперь я хочу использовать пакет stringr для извлечения цифр из веб-скрапинга, но я не могу использовать stringr, потому что price не является атомарным вектором. Как мне обойти это?


person herkyonparade    schedule 23.06.2015    source источник


Ответы (1)


Вот одна из возможностей:

library(stringr)
pr <- xml_children(price)
p_raw <- sapply(1:length(pr), function(x) paste(xml_attrs(pr[[x]]),collapse=""))
p_readable <- paste0("$",str_replace_all(p_raw,c("d"=".","p"="")))

#> p_readable
# [1] "$2.49" "$2.57" "$2.59" "$2.59" "$2.59" "$2.59" "$2.59" "$2.59" "$2.61" "$2.64" "$2.67" "$2.68" "$2.68"
#[14] "$2.68" "$3.08" "$2.99" "$2.98" "$2.98" "$2.98" "$2.98" "$2.98" "$2.98" "$2.98" "$2.98" "$2.98" "$2.98"
#[27] "$2.98" "$2.98" "$2.98"
person RHertel    schedule 25.06.2015
comment
я получаю Error in vapply(list(...), length, integer(1)) : argument "replacement" is missing, with no default - person herkyonparade; 25.06.2015
comment
Вы уверены, что правильно скопировали код? Это sapply(), а не vapply(). У меня нет сообщения об ошибке. - person RHertel; 25.06.2015
comment
Я использую rvestверсию 0.2.0, stringr версию 1.0.0 и R версию 3.2.1. - person RHertel; 25.06.2015
comment
Извините, но я не думаю, что могу помочь в данный момент, так как я не могу воспроизвести вашу ошибку. Может быть, кто-то еще может попробовать и посмотреть, что может пойти не так. - person RHertel; 25.06.2015
comment
Я обновил stringr с 0.6.1 до 1.0.0 и все заработало отлично. Спасибо за вашу помощь - person herkyonparade; 25.06.2015