如果表不存在,则跳过For循环
遇到了另一个问题。我有一个for循环,其中包含URL,用于从id为batting_gamelogs的表中获取击球信息。如果该id在页面上不存在,则转到下一个url,否则将删除该表 我想下面应该是这样的,但我无法让它工作如果表不存在,则跳过For循环,r,xpath,R,Xpath,遇到了另一个问题。我有一个for循环,其中包含URL,用于从id为batting_gamelogs的表中获取击球信息。如果该id在页面上不存在,则转到下一个url,否则将删除该表 我想下面应该是这样的,但我无法让它工作 if xpathSApply(batting, '//*[@id != "batting_gamelogs"]')[[1]] next else { tableNode <- xpathSApply(batting, '//*[@id="batting_ga
if xpathSApply(batting, '//*[@id != "batting_gamelogs"]')[[1]] next
else
{
tableNode <- xpathSApply(batting, '//*[@id="batting_gamelogs"]')[[1]]
data <- readHTMLTable(tableNode, stringsAsFactors = FALSE)
data # select the first table
total <- cbind(id,year,data)
batlist <- rbind(batlist, total)
}
如果xpathSApply(击球,'//*[@id!=“击球”游戏日志“])[[1]]下一步
其他的
{
表节点
我不能让它工作
if xpathSApply(batting, '//*[@id != "batting_gamelogs"]')[[1]] next
else
{
tableNode <- xpathSApply(batting, '//*[@id="batting_gamelogs"]')[[1]]
data <- readHTMLTable(tableNode, stringsAsFactors = FALSE)
data # select the first table
total <- cbind(id,year,data)
batlist <- rbind(batlist, total)
}
这句话应该一直提醒我们,告诉我们实际发生了什么(以及它与您预期发生的事情有何不同)。我怀疑发生的事情是它跳过太多(而不是在应该跳过的时候不跳过)。但您可以告诉我们,而不是让我们去弄清楚
if xpathSApply(batting, '//*[@id != "batting_gamelogs"]')[[1]] next
“不是”位于错误的位置。您的意思是,如果页面上有一个元素的id
属性的值不是batting\u gamelogs
,则跳过此迭代。相反,如果页面上没有一个元素的id
属性的值是batting\u gamelogs
,则要跳过此迭代>
因此,将其用于XPath表达式:
'//*[@id = "batting_gamelogs"]'
通过测试结果列表的长度是否为零,将“not”放在xpathSApply()
之外(感谢下面的答案):
我拿出了[[1]]
,因为你只想测试是否返回了任何值;你不关心提取第一个结果。谢谢@LarsH的帮助,非常感谢!!你的帖子完全有道理,但我现在收到了两个错误,一个是xpathSApply代码*+如果!xpathSApply(batting),/*[@id=“batting\u gamelogs”]“)[[1]]下一个错误:if!*代码中的意外“!”和最后一个}代码*>}错误:if}中的意外“}”*代码中的意外“}”很抱歉,如果我忽略了一些非常愚蠢的事情,我是R语言的新手。再次感谢@唐:我也是新手。。。我更喜欢XPath。因此,为错误道歉,并感谢您发布错误消息。我已经更新了上面的内容,使其更有可能工作,但我没有测试R的环境。因此,如果它仍然不工作,我就没有能力解决问题的R方面。现在需要的是测试xpathSApply()的输出,并确定是否返回了任何内容。@Don:根据Perfect@larsh再次更新了我的答案!非常感谢。很抱歉,我没有找到你的帖子。不知道为什么我的搜索没有找到那个,但我一直在搜索表格。再次感谢!
if (length(xpathSApply(batting, '//*[@id = "batting_gamelogs"]')) == 0) next