作为可执行 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/