Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果表不存在,则跳过For循环_R_Xpath - Fatal编程技术网

如果表不存在,则跳过For循环

如果表不存在,则跳过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

遇到了另一个问题。我有一个for循环,其中包含URL,用于从id为batting_gamelogs的表中获取击球信息。如果该id在页面上不存在,则转到下一个url,否则将删除该表

我想下面应该是这样的,但我无法让它工作

 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