如何让R安装所需的软件包?

如何让R安装所需的软件包?,r,R,我在一个小组项目上工作。对于我的分析,我需要一些软件包。因此,为了让我的脚本在每个人的计算机上工作,我在开始时告诉R在所有安装的软件包中检查所需软件包的名称,如果名称不存在,则安装它。我的代码是: { ifelse("ggplot2" %in% rownames(installed.packages()),"" ,install.packages("ggplot2")) ifelse("agricolae" %in% rownames(installed.packages()),"" ,inst

我在一个小组项目上工作。对于我的分析,我需要一些软件包。因此,为了让我的脚本在每个人的计算机上工作,我在开始时告诉R在所有安装的软件包中检查所需软件包的名称,如果名称不存在,则安装它。我的代码是:

{
ifelse("ggplot2" %in% rownames(installed.packages()),"" ,install.packages("ggplot2"))
ifelse("agricolae" %in% rownames(installed.packages()),"" ,install.packages("agricolae"))
ifelse("lattice" %in% rownames(installed.packages()),"" ,install.packages("lattice"))
ifelse("DescTools" %in% rownames(installed.packages()),"" ,install.packages("DescTools"))
ifelse("FSA" %in% rownames(installed.packages()),"" ,install.packages("FSA")) }
但这似乎效果不太好。例如,R安装第一个,但不安装第二个。 是因为ggplot太大而R忘记了其余部分,还是我又犯了一个错误


谢谢大家

它认为您感到困惑的原因是您将所有这些命令放在了一个大括号的代码块中,而这个代码块只会返回一个东西。如果你刚拆下支架,它可能会更清晰一些。注意:

{
    ifelse(TRUE, "yes", "no")
    ifelse(TRUE, "yes", "no")
}
Returns: "yes"
只有一个。更好的做法是,尝试以下方法:

packages=c("ggplot2", "lattice", "simpleCache")

installed = rownames(installed.packages())

for (pkg in packages) {
    if (! pkg %in% installed) {
        install.packages(pkg)
    }
}

问题是你使用了ifelse。在ifelse的帮助下:

“ifelse”返回与“test”形状相同的值,该值为 由从“是”或“否”中选择的元素填充,具体取决于 关于“test”的元素是“TRUE”还是“FALSE”

现在install.packages以不可见的方式返回NULL,这不适用于ifelse,如您所见:

ifelse(T, NULL, 1)
# Error in ans[test & ok] <- rep(yes, length.out = length(ans))[test & ok] : 
# replacement has length zero
# In addition: Warning message:
# In rep(yes, length.out = length(ans)) :
#   'x' is NULL so the result will be NULL
因此无法很好地处理install.packages返回的NULL值

作为代码的一对一替换,您需要的是:

if ("ggplot2" %in% rownames(installed.packages())) install.packages("ggplot2")

但是最好使用您在这里得到的基于列表的答案之一,因为它更易于维护。

1-创建一个包名向量。2-创建一个函数。3-在向量上运行函数。e、 g:x相关:嗯,这不是原因。原因是install.packages的不可见NULL以及使用ifelse而不是if。最终OP对任何返回值都不感兴趣。
if ("ggplot2" %in% rownames(installed.packages())) install.packages("ggplot2")