尝试输入以下内容安装所有与拨浪鼓相关的套餐:
install.packages(rattle, dependencies = c("Depends","Suggests"))
并得到了这个
Installing package into ‘C:/Users/Hooman/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
Error in as.character(x) :
cannot coerce type 'closure' to vector of type 'character'
我已经在该文件夹中安装了两个单独的软件包,没有任何问题。
答案 0 :(得分:24)
你得到错误的原因是install.packages
函数需要一个字符对象,而你给它一个不带引号的表达式rattle
。 Ben使用单个元素字符向量"rattle"
,因此符合函数的要求。与某些函数install.packages
不同,它不能提供其第一个参数的“非标准评估”。
R有时会出现一些不一致的评估惯例。有几个函数可以提供不带引号的表达式并自动转换为字符。该列表包括library
及其表兄require
,以及help
,subset
和$
。这些被知识渊博的用户视为“非标准”评估,他们可能会在编程中遇到陷阱。错误消息告诉你R试图转换它“认为”将是一个语言对象,一个闭包(松散地是一个R和LiSP术语的函数),一个字符,并没有成功。您可以通过此控制台交互看到相同的错误:
> as.character(mean)
Error in as.character(mean) :
cannot coerce type 'closure' to vector of type 'character'
如果你查看Ben提到的library
函数并向下滚动内部函数定义,你最终会得到库避免错误的机制:
if (!character.only)
package <- as.character(substitute(package))
这也可以避免我故意用作例子的错误:
> as.character(substitute(mean))
[1] "mean"
substitute
函数正在对作为闭包的语言元素进行处理,结果对象的R“name”具有as.character
方法。