我正在使用网站http://www.crowdrise.com/CDISkoll
考虑我做的以下R代码:
library("RCurl")
library("XML")
library("stringr")
user.address<-"http://www.crowdrise.com/CDISkoll"
user.url<-getURL(user.address)
html <- htmlTreeParse(user.url, useInternalNodes = TRUE)
if(!is.null(xpathSApply(html,
'//div[@class="grid1-4"]//p[@class="progressText"]',xmlValue))){
website.goal.percentage<-
do.call("paste",as.list(xpathSApply(html,
'//div[@class="grid1-4"]//p[@class="progressText"]',xmlValue)))
}
if(is.null(xpathSApply(html,
'//div[@class="grid1-4"]//p[@class="progressText"]',xmlValue))){
website.goal.percentage<-"Not Available"
}
现在我上面提到的网站不包含任何有关xpath的信息
//div[@class="grid1-4"]//p[@class="progressText"]
。因此,我的变量website.goal.percentage
应该是字符串"Not Available"
。但是当我在R上执行代码时,website.goal.percentage
会返回character(0)
....
为什么R没有将"Not Available"
存储到变量website.goal.percentage
,我该如何解决?
答案 0 :(得分:1)
这很容易诊断,你应该看到xpathSApply
这里返回一个空列表,以及R如何认为is.null(list())
是FALSE
。相反,您应该检查length(...) == 0
。
我还建议你使用xpathApply
,因为它系统地返回一个列表。最后,看看如果使用变量,代码看起来会更好看:
nodes <- xpathApply(html, '//div[@class="grid1-4"]//p[@class="progressText"]',
xmlValue)
website.goal.percentage <- if(length(nodes) == 0) "Not Available" else
do.call("paste", nodes)