rvest,html_nodes()错误:无法将'environment'强制类型为'list'类型的向量.失败RScript,适用于Session

mpe*_*tis 10 r rvest

html_nodes()当作为可执行的RScript运行时,该函数失败如下,但在交互式运行时成功.有人知道在跑步中会有什么不同吗?

交互式运行使用全新会话运行,源语句是第一次运行.

$ ./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
Run Code Online (Sandbox Code Playgroud)

然而,当以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
Run Code Online (Sandbox Code Playgroud)

谢谢你,马特

mpe*_*tis 6

添加行:

library(methods)
Run Code Online (Sandbox Code Playgroud)

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

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

这个主题可能会对它有所了解.似乎在某些情况下,RSCRIPT默认情况下不加载package :: methods,而交互式会话默认加载它.似乎"when"不清楚,但显式调用所有RSCRIPT执行的库(方法)似乎是安全的选择:可以交互使用包,但Rscript会出错