【问题标题】:R function to parse returning error in strsplit "subscript out of bounds"R函数解析strsplit“下标越界”中的返回错误
【发布时间】:2020-01-06 22:18:14
【问题描述】:

我正在使用 R 为一列 HTML 页面提取域名。为此,我创建了一个函数“域”。它似乎工作正常,直到它击中以“mailto:person@example.com”形式出现的页面。这些显然是电子邮件的链接。我仍然想将这些合并到我的数据集中,但我得到的错误是:“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 上运行了这段代码,它工作得很好,所以我认为这一定是它卡住的地方。我不介意它是否导致“person@example.com”或保持原样。

【问题讨论】:

  • 如果该功能在其余情况下工作正常,为什么要打扰它?添加if 条件以检查mainpagelevel3$url 是否以"mailto:" 开头或遵循""^mailto:.*@.*" 模式并在这种情况下根据需要返回输出如何?
  • 这似乎是一个非常好的选择,我只是在编写“if”语句时遇到了一些麻烦!感谢您的建议!
  • 您可能想研究urltools package 中的函数url_parse()

标签: r html-parsing


【解决方案1】:

我们可以尝试编写一个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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多