rvest,html_nodes() 错误 : cannot coerce type 'environment' to vector of type 'list' . RScript 失败,在 session 中工作

标签 r rvest

作为可执行 RScript 运行时,html_nodes() 函数会失败,如下所示,但以交互方式运行时会成功。有人知道运行中可能有什么不同吗?

交互式运行是使用新 session 运行的,源语句是第一个运行的。

$ ./test-pdp.R
>
> ################################################################################
> # Setup
> ################################################################################
> suppressPackageStartupMessages(library(plyr))
> suppressPackageStartupMessages(library(dplyr))
> suppressPackageStartupMessages(library(stringr))
> suppressPackageStartupMessages(library(rvest))
> suppressPackageStartupMessages(library(httr))
>
>
> read_html("http://google.com") %>%
+     html_nodes("div") %>%
+     length()
Error in as.vector(x, "list") :
  cannot coerce type 'environment' to vector of type 'list'
Calls: %>% ... <Anonymous> -> lapply -> as.list -> as.list.default
Execution halted

但是当以 source() 交互方式运行时它会成功:

> source("/Users/a6001389/Documents/projects/hottest-deals-page-scrape/src/test-pdp.R", echo=TRUE)
> #!/usr/bin/RScript
> options(echo=TRUE)
> ################################################################################
> # Setup
> ####################################################### .... [TRUNCATED] 
> suppressPackageStartupMessages(library(dplyr))
> suppressPackageStartupMessages(library(stringr))
> suppressPackageStartupMessages(library(rvest))
> suppressPackageStartupMessages(library(httr))
> read_html("http://google.com") %>%
+     html_nodes("div") %>%
+     length()
[1] 17

谢谢你, 马特

最佳答案

添加行:

library(methods)

根据 Hadley Wickham 对原始问题的评论确实解决了这个错误。为什么它解决了这个错误,我不知道。但我发布了一个答案,因此这里有一个易于引用的解决方案。如果为什么这可以解决问题被发布,我会接受这个答案。

将@mekki-macaulay下面的评论添加到此处的文本中,因为它确实增加了一些清晰度:

This thread might shed some light on it. It seems that in some contexts RSCRIPT doesn't load package::methods by default, whereas interactive sessions do load it by default. It seems that the "when" is not clear, but explicitly calling library(methods) for all RSCRIPT executions seems to be the safe bet: can use package interactively, but Rscript gives errors

关于rvest,html_nodes() 错误 : cannot coerce type 'environment' to vector of type 'list' . RScript 失败,在 session 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35351443/

相关文章:

html - 在数据框列上使用 rvest 函数

r - 如何使用 rvest 解析具有不同数量子级的 xml

javascript - 查询选择器全部在 rvest 包中

rvest:处理不同数量的嵌套类

r - 用ggplot2从点绘制平均线

r - 为什么 lapply() 将我的 R 数据框转换为列表?

r - 需要使用 dplyr 对多列变量的数据行求和

r - 条件增量 tidyverse

r - R 中的 .jnew 和 j.check 中的错误中的 write.xlsx 错误

html - 使用 rvest(或另一个 R 包)检测 HTML 段落的开头何时是不同的格式(例如 emboldened)