【问题标题】:Atomic vector error when using R package `stringr`使用R包`stringr`时的原子向量错误
【发布时间】:2015-09-09 18:59:45
【问题描述】:

我想使用包rvest 从网页中提取汽油价格。但是,我无法拉取数值,必须通过 html 类.sp_p 拉取。

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

拉动gas价格:

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 不是原子向量。我该如何解决这个问题?

【问题讨论】:

    标签: r dplyr stringr rvest


    【解决方案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"
    

    【讨论】:

    • 我收到Error in vapply(list(...), length, integer(1)) : argument "replacement" is missing, with no default
    • 您确定您复制粘贴的代码正确吗?这是sapply(),而不是vapply()。我没有错误信息。
    • 我使用的是rvest0.2.0版、stringr1.0.0版和R3.2.1版。
    • 很抱歉,由于无法重现您的错误,我认为目前无法提供任何帮助。也许其他人可以尝试看看可能出了什么问题。
    • 我将 stringr 从 0.6.1 更新到 1.0.0,一切正常。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    相关资源
    最近更新 更多