R 函数解析 strsplit 中返回错误“下标越界”

R function to parse returning error in strsplit "subscript out of bounds"

提问人:MAb2021 提问时间:9/4/2019 最后编辑:thelatemailMAb2021 更新时间:9/4/2019 访问量:844

问:

我正在使用 R 提取一列 HTML 页面的域名。为此,我创建了一个函数“域”。它似乎工作正常,直到它到达以“mailto:[email protected]”形式出现的页面。这些显然是电子邮件的链接。我仍然想将它们合并到我的数据集中,但我得到的错误是:“strsplit(gsub(”http://|https://|www\.“, ”“, x), ”/“)[[c(1, 1)]] : 下标越界”

如何修改此代码以绕过“mailto”页面?

这是我的职能

domain <- function(x) strsplit(gsub("http://|https://|www\\.","", x),"/")[[c(1,1)]]

这是我的命令

mainpagelevel3$url <- sapply(mainpagelevel3$url, domain)

我在一组不包含“mailto:”页面的 url 上运行了这段代码,它工作得很好,所以我认为这一定是它卡住的地方。我不介意它是否导致“[email protected]”或保持原样。

r html 解析

评论

0赞 Ronak Shah 9/4/2019
如果该功能在其他情况下工作正常,为什么要打扰它?如何添加一个条件来检查是否以模式开头或遵循模式,并根据需要返回此类情况的输出?ifmainpagelevel3$url"mailto:"""^mailto:.*@.*"
0赞 MAb2021 9/4/2019
这似乎是一个非常好的选择,我只是在编写“if”语句时遇到了一些麻烦!谢谢你的建议!
0赞 neilfws 9/4/2019
您可能需要调查 urltools 包中的函数。url_parse()

答:

1赞 Ronak Shah 9/4/2019 #1

我们可以尝试编写一个条件来检查以 和 have 开头的字符串(如果需要,可以使其更加严格)。因此,该函数可能如下所示if"mailto""@"

domain <- function(x) {
   if(grepl("^mailto:.*@.*", x)) x 
      else strsplit(gsub("http://|https://|www\\.","", x),"/")[[c(1,1)]]
}

然后像往常一样使用sapply

mainpagelevel3$url <- sapply(mainpagelevel3$url, domain)