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
然而,当以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
谢谢你, 马特
答案 0 :(得分:6)
添加行:
if( $.trim($("#NameField").val()) == "" || $.trim($("#EmailField").val()) == "" || !$('#Options:checked').length ) {
console.log("email wrong");
$("#email_wrong").html("* Please fill in all fields.");
$("#email_wrong").fadeIn();
}
根据Hadley Wickham对原始问题的评论确实解决了这个错误。为什么它解决了这个错误,我不知道。但我发布了一个答案,所以这里有一个容易引用的解决方案。如果为什么这解决了问题的发布,我会接受这个答案。
将@ mekki-macaulay下面的评论添加到文本中,因为它确实增加了一些清晰度:
这个帖子可能会对它有所了解。似乎在某些情况下,RSCRIPT默认情况下不加载package :: methods,而交互式会话默认加载它。似乎“何时”并不清楚,但明确调用所有RSCRIPT执行的库(方法)似乎是安全的选择:can use package interactively, but Rscript gives errors
答案 1 :(得分:-1)
这可能是magrittr::%>%
运算符工作方式的副作用。来自Magrittr Documentation - Page 8: %>% Pipe:
magrittr管道运营商使用非标准评估。他们捕获他们的输入并检查它们以确定如何继续。首先,从所有单独的右侧表达式产生函数,然后通过将该函数应用于左侧来获得结果。在大多数情况下,人们可以忽略magrittr评估的微妙方面,但是有些函数可能会捕获它们的调用环境,因此使用运算符将不会完全等同于没有管道运算符的“标准调用” (强调我的)。
因此,请在没有%>%
的情况下尝试查看是否因为html_nodes
错误地从命令行捕获环境(如您的错误消息所示),而在交互式会话中,它可以抓取会议的环境变量:
google_node <- read_html("http://google.com");
div_nodes <- html_nodes(google_node, "div");
length(div_nodes);
当作为可执行的RScript调用时,它是否有效?