这些天我似乎与共同作者分享了很多代码.他们中的许多人都是初级/中级R用户,并没有意识到他们必须安装他们尚未拥有的软件包.
是否有一种优雅的方式来调用installed.packages(),将其与我正在加载的那些进行比较并在安装时如果丢失?
我有一个R脚本,与不同计算机上的多个用户共享.其中一行包含install.packages("xtable")命令.
问题是,每次有人运行脚本时,R都会花费大量时间显然重新安装软件包(实际上确实需要一些时间,因为实际案例中有几个软件包的向量).
如何首先检查软件包是否已安装,然后仅install.packages()针对那些软件包运行?
我想同时在oner和supress suppressPackageStartupMessages中加载包.
第一个链接中的答案使用了lapply:
packages <- c("tidyverse", "qdap", "stringr", "stringi", "textstem", "foreach", "caret", "xgboost", "quanteda")
lapply(packages, require, character.only = T)
Run Code Online (Sandbox Code Playgroud)
这会向控制台返回一个难看的列表:
[[1]]
[1] TRUE
[[2]]
[1] TRUE
[[3]]
[1] TRUE
[[4]]
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
另外,我还想摆脱那些在加载时发送到控制台的消息,例如
> library(tidyverse)
Loading tidyverse: ggplot2
Loading tidyverse: dplyr
Conflicts with tidy packages --------------------------------------------------------------------
accumulate(): purrr, foreach
filter(): dplyr, stats
lag(): dplyr, stats
when(): purrr, foreach
Run Code Online (Sandbox Code Playgroud)
是否有一个聪明,简短的方法来加载包的向量和suppressPackageStartupMessages?
我试图通过粘贴论点来使用分离.这应该是一件容易的事,但不适合我.当我想到使用时,我知道是时候寻求帮助了eval(parse())
通常,如果我加载一个包,我可以按如下方式分离它:
detach(package:reshape)
Run Code Online (Sandbox Code Playgroud)
我想通过将packahe名称作为字符向量传递来做同样的事情.这是我的尝试:
pack<-"reshape"
detach(paste("package:", pack, sep=""))
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
> detach(paste("package:", pack, sep=""))
Error in detach(paste("package:", pack, sep = "")) :
invalid 'name' argument
Run Code Online (Sandbox Code Playgroud)
请帮帮我.