尝试通过键入以下内容来安装所有与拨浪鼓相关的软件包:
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'
我已经在该文件夹中安装了两个单独的软件包,没有任何问题。
@BenBolker 发布了一个答案作为评论,也许是因为他希望你能盯着你的代码和他的代码之间的差异,并获得禅宗时刻。他还认为,作为一位谦虚的绅士,这太简单了,不值得任何支持。所以我感到内疚,因为任何赞成票都是他的而不是我的。我现在将尝试合法地赢得任何支持。
您收到错误的原因是install.packages
函数需要一个字符对象,而您给它的是不带引号的表达式rattle
。 Ben 使用单元素字符向量"rattle"
,从而满足函数的要求。与某些功能不同install.packages
没有能力为其第一个论点提供“非标准评估”。
R 是一种有趣的语言,有时具有一些不一致的评估约定。有几个函数可以提供不带引号的表达式并将其自动转换为字符。该列表包括library
,以及它的表弟,require
, 也help
, subset
, and $
。这些被知识渊博的用户认为是“非标准”评估,并且它们在编程中可能存在陷阱。错误消息告诉您,R 试图将它“认为”的语言对象、闭包(大致是 R 和 LiSP 的函数术语)转换为字符,但没有成功。您可以通过此控制台交互看到相同的错误:
> as.character(mean)
Error in as.character(mean) :
cannot coerce type 'closure' to vector of type 'character'
如果你看一下library
Ben 提到的函数并向下滚动到内部函数定义,您最终会看到库避免该错误的机制:
if (!character.only)
package <- as.character(substitute(package))
这也可以避免错误,我特意用它作为例子:
> as.character(substitute(mean))
[1] "mean"
The substitute
函数正在对被视为闭包的语言元素进行处理,并且生成的对象 R“名称”具有as.character
method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)