r语言 - 安装时出错:无法将类型 'closure' 强制转换为类型 'character' 的矢量



试图通过输入

安装所有与rattle相关的软件包
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,以及helpsubset$。这些被有经验的用户认为是"非标准"的评估,并且它们在编程中可能存在缺陷。错误消息告诉您,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方法。

相关内容

  • 没有找到相关文章

最新更新