R 安装时出错:无法强制类型';关闭';到类型为'的向量;字符';

R 安装时出错:无法强制类型';关闭';到类型为'的向量;字符';,r,installation,rattle,R,Installation,Rattle,试图通过键入以下内容安装所有与Crattle相关的软件包: 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 'clo

试图通过键入以下内容安装所有与Crattle相关的软件包:

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
函数需要一个character对象,而您给它的是一个不带引号的表达式
bragg
。Ben使用单元素字符向量
“嘎嘎声”
,因此符合功能要求。与某些函数不同,
install.packages
不提供其第一个参数的“非标准评估”

R有时是一种有趣的语言,有一些不一致的评估约定。有几个函数可以提供一个不带引号的表达式,并将其自动转换为字符。该列表包括
、它的近亲
require
、以及
帮助
子集
$
。这些被知识渊博的用户视为“非标准”评估,他们在编程中可能会有陷阱。错误消息告诉您,R试图将它“认为”的语言对象、闭包(大致上是函数的R和LiSP术语)转换为字符,但没有成功。您可以在此控制台交互中看到相同的错误:

> as.character(mean)
Error in as.character(mean) : 
  cannot coerce type 'closure' to vector of type 'character'
如果您查看Ben提到的
函数,并向下滚动浏览内部函数定义,您最终会看到库避免该错误的机制:

if (!character.only) 
            package <- as.character(substitute(package))

substitute
函数在一个被视为闭包的语言元素上进行处理,结果对象R“name”有一个
as.character
方法。

尝试
install.packages(“嘎嘎嘎”,dependencies=c(“dependens”,“suggestions”)
公平地说,这相当混乱(我认为),因为
library()之类的函数
require()
通过允许用户指定字符向量或符号,尝试让用户的生活更轻松(我认为是错误的),希望我没有任何不公平之处。我记得在启动R时也有同样的困惑。我只是后悔在你提供见解时需要“回答”一个问题。哦,我明白了,你想让我取消我的投票。我可以试试。我没有使用我的帝国近身异能,因为尽管搜索,我还是找不到真正的复制品。我不想让你做任何特别的事情,我只是在评论。(从OP的回答中复制):是的,它奏效了。install.packages(“flatter”,dependencies=c(“dependens”,“suggestions”))“flatter”必须用双引号括起来。我想我必须给Graham Williams@togaware.com发一封电子邮件来纠正他的指示。(从OP的答案中复制:)还有一个问题:如果你不能从CRAN和internet安装软件包,你需要先在本地复制软件包,然后从zip安装,尽管这样一次只能安装一个软件包,但这是一个相当痛苦的手动过程,因为您不知道什么包取决于什么。是否有任何方法指示“install.packages”从本地安装包及其依赖项或在本地设置repo,是否有任何方法同时下载所有可用(或依赖的包)?
> as.character(substitute(mean))
[1] "mean"