2015-09-21 60 views
0

我试图抓http://then.gasbuddy.com/错误:替换长度为零R

我运行中的R

library(RCurl) 
library(XML) 
doc <- htmlTreeParse('http://www.southcarolinagasprices.com/GasPriceSearch.aspx?typ=adv&fuel=A&srch=0&area=All%20Areas&station=All%20Stations&tme_limit=4') 
rootNode <- xmlRoot(doc) 

((rootNode[[2]][4])[1][[1]])[[15]][[1]][[11]][[1]][[1]][[2]][[8]][[1]][[2]][[1]][[1]][[1]][[1]][[1]][[1]] 

#<div class="p1"/> 

x <- matrix(, nrow = 20, ncol = 4) 

x[1,1] <- xmlValue(((rootNode[[2]][4])[1][[1]])[[15]][[1]][[11]][[1]][[1]][[2]][[8]][[1]][[2]][[1]][[1]][[1]][[1]][[1]][[1]]) 

下一个代码,但我有这样的错误

replacement has length zero

我怎么能减去P1并把它放在一个矩阵?

回答

2

你已经想出了一个有趣的方式来解决他们的价格混淆。因为他们并没有限制他们的服务条款刮痧,这里是你可以刮价格的一种方法:

library(xml2) 

doc <- read_html('http://www.southcarolinagasprices.com/GasPriceSearch.aspx?typ=adv&fuel=A&srch=0&area=All%20Areas&station=All%20Stations&tme_limit=4') 

prices <- xml_find_all(doc, xpath="//div[@class='sp_p']") 

sapply(prices, function(x) { 
    as.numeric(paste(gsub("d", "\\.", 
         gsub("^p", "", 
          unlist(xml_attrs(xml_find_all(x, "./div"))))), 
        collapse="")) 
}) 

## [1] 1.65 1.65 1.65 1.65 1.65 1.65 1.65 1.65 1.65 1.67 1.68 1.69 1.69 1.69 1.69 1.69 1.69 1.69 1.69 
## [20] 1.70 1.71 1.72 1.72 1.73 1.73 1.73 1.73 1.73 1.73 1.73 1.73 1.73 1.74 1.74 1.74 1.74 1.74 1.74 
## [39] 1.74 1.74 1.74 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.75 1.76 1.76 
## [58] 1.76 1.76 1.76 1.76 1.76 1.76 1.76 1.76 1.76 1.76 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 
## [77] 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 
## [96] 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.77 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 
## [115] 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 
## [134] 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.78 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 
## [153] 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 
## [172] 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 
## [191] 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 1.79 
+0

它的工作原理谢谢你,我是R中还挺新的,你知道一种方法来此值转换为一个data.frame? – Jeisson

+0

你可以扩展一点吗?你只是想把天然气价格还是整个“表格”当作数据框架?如果是后者,对于一个新问题来说是非常好的,同时扩大这个问题的范围 – hrbrmstr

+0

我只需要在data.frame中将这个天然气价格导出为.csv或.txt – Jeisson

1

错误意味着它说什么。看看返回值从

xmlValue(((rootNode[[2]][4])[1][[1]])[[15]][[1]][[11]][[1]][[1]][[2]][[8]][[1]][[2]][[1]][[1]][[1]][[1]][[1]][[1]]) 

这是

character(0) 

因为<div class="p1"/>是一个自闭标签不包含任何文本。如错误消息所示,在R中用一个长度为零的东西替换一部分矢量是错误的。如果您希望这些长度为零的结果返回NA""之类的内容,则需要使用if/else结构。