【问题标题】:FUN.VALUE missing when using vapply使用 vapply 时缺少 FUN.VALUE
【发布时间】:2019-03-22 13:56:19
【问题描述】:

我试图在列表上多次应用一个函数以从这些 url 中提取 html,但是当我尝试使用 vapply 执行此操作时,我收到了与 FUN,VALUE 参数相关的错误。我有网址,我想通过rvest::html_nodes 解析它们,但是后一个函数不接受列表,所以 lapply 不起作用。

library(xml2)

mat <- c("204554", "204521")
x <- vapply(paste0("https://www.camara.leg.br/deputados/", mat), read_html)

给我一​​个错误

Error in vapply(paste0("https://www.camara.leg.br/deputados/", mat), read_html): 
  argument "FUN.VALUE" is missing, with no default

我尝试了一些在其他主题中找到的答案,但无法解决问题。

【问题讨论】:

  • 我认为您可能想使用lapply,然后再次使用它在结果列表的每个元素上调用html_nodes。 (如果您查看?vapply 的文档,您可以阅读有关FUN.VALUE 参数的所有信息,其中讨论了所有返回值必须与您指定的长度类型匹配的事实,这可能有问题,因为read_html 返回一个列表。所以只需使用lapply。)
  • ...所以如果您提供FUN.VALUE = vector("list",2),似乎vapply 将在这个特定示例中起作用,但这对我来说似乎过于严格,尤其是在抓取网站时。我会坚持lapply
  • ?vapply 始终需要三个参数,这与 lapplysapply 不同,通常用于简化结构(即向量/矩阵/数组)而不是列表。
  • 我认为在这种情况下“过于严格”可能是好的?如果出现问题,添加安全网。 @joran 你想在你的 cmets 被盗之前把它变成一个答案吗?)
  • @joran 使用 lapply 的问题是我想使用 R x %&gt;% html_nodes(...) 并且它以错误 R Error in UseMethod("xml_find_all") : no applicable method for 'xml_find_all' applied to an object of class "list" 回答我

标签: r


【解决方案1】:

vapply 尝试将您的函数 (read_html) 的结果强制转换为您在 FUN.VALUE 中指定的类型。例如,如果您希望在字符向量中给出所有结果,则可以使用

FUN.VALUE = character ()

如果您希望将结果分开,请尝试使用lapply 而不是vapply,这将返回一个元素分开的列表。

【讨论】:

  • 我仍然收到一个错误,但是另一个错误,请看R Error in vapply(paste0("https://www.camara.leg.br/deputados/", mat), read_html, : values must be length 0, but FUN(X[[1]]) result is length 2
猜你喜欢
  • 2018-05-27
  • 2019-01-10
  • 2017-08-06
  • 2022-11-26
  • 2017-09-16
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多