写在前面
我们有时候新安装R语言时,想要利用之前的安装好的包,比如我们安装了openR, 但是还想要之前安装的包, 就可以定义library, 这样就不用重头安装很多包了. 定义分为两种, 临时性的和永久性的, 推荐永久性的方法。包括windows系统和Linux系统,Mac系统的话原理应该是相通的。
还有一种需求,就是我们升级了包,比如R4.1升级到了R4.2,可以将library中的包复制一遍,命名为R4.2,然后指定它作为R的包存储位置,这样再运行一下下面代码,就会自动检查是否能用,如果可以在新版本中用,就会保留,不能使用就会升级,这是最节省劳动的做法。
下面代码,需要在路径设置好之后,在R中执行:
update.packages(checkBuilt=TRUE, ask=FALSE)
1 Linux系统解决方案
1.1 临时性的方法:
可以在R里面用如下命令
.libPaths("~/R/library")
上面的路径~/R/library
就是R包的路径,如果你安装R包,它会存储在这个路径下。但是这个路径临时有效。不能永久修改。下面这种方法可以永久修改
1.2 , 永久修改方法:
1.2.1, 进入你的工作目录
cd ~
1.2.2, 进入R语言, 查看你的.libPath()
> .libPaths()
[1] "/home/dengfei/R/x86_64-pc-linux-gnu-library/3.5"
[2] "/home/dengfei/anaconda3/lib/R/library"
1.2.3, 退出R, 编辑一个新的文件 .Rprofile
注意, 这里的.Rprofile
是文件名
查看文件名:
(base) [dengfei@localhost ~]$ ls .Rprofile
.Rprofile
查看文件内容:
(base) [dengfei@localhost ~]$ cat .Rprofile
.libPaths(c("/opt/microsoft/ropen/3.5.1/lib64/R/library","/home/dengfei/R/x86_64-pc-linux-gnu-library/3.5","/home/dengfei/anaconda3/lib/R/library"))
比如说, 你要将目录:"/opt/microsoft/ropen/3.5.1/lib64/R/library"放到里面, 这里将你默认lib的和新的lib放到文件中, 注意这里是多个, 所以用c()
.libPaths(c("/opt/microsoft/ropen/3.5.1/lib64/R/library","/home/dengfei/R/x86_64-pc-linux-gnu-library/3.5","/home/dengfei/anaconda3/lib/R/library"))
1.2.4, 再次进入R, 然后查看.libPath(), 发现已经成功
> .libPaths()
[1] "/opt/microsoft/ropen/3.5.1/lib64/R/library"
[2] "/home/dengfei/R/x86_64-pc-linux-gnu-library/3.5"
[3] "/home/dengfei/anaconda3/lib/R/library"
2 Windows系统解决方案
如果你是由R4.1版本,升级到了R4.2版本,可以找到你的library,然后将文件4.1拷贝一份为4.2
然后进入R语言:
> .libPaths()
[1] "C:/Users/xx/AppData/Local/R/win-library/4.2"
[2] "C:/Program Files/R/R-4.2.1/library"
可以看到,R4.2改变了library的目录,它不在文档下面了,需要修改一下,才可以。
2.1 临时修改
比如,我想把这个目录作为R的library目录:
C:\Users\xx\Documents\R\win-library\4.2
在R中,一个斜杠需要变为两个斜杠,所以设置的代码为:
.libPaths("C:\\Users\\xx\\Documents\\R\\win-library\\4.2")
下面代码可以看到,本来我是没有tidyverse
的,我设置完.libPaths之后,就可以成功载入了。
> library(tidyverse)
Error in library(tidyverse) : 不存在叫‘tidyverse’这个名字的程辑包
> .libPaths("C:\\Users\\xx\\Documents\\R\\win-library\\4.2")
> library(tidyverse)
── Attaching packages ───────────────────────────────────── tidyverse 1.3.1 ──
✓ ggplot2 3.3.5 ✓ purrr 0.3.4
✓ tibble 3.1.6 ✓ dplyr 1.0.4
✓ tidyr 1.2.0 ✓ stringr 1.4.0
✓ readr 2.1.2 ✓ forcats 0.5.1
── Conflicts ──────────────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
当然,这是临时性的,如果我们重启R语言,再次载入,就发现报错了:
2.2 永久性修改
2.2.1 查看R中的默认路径
进入R语言,然后运行getwd,查看路径的地址:
> getwd()
[1] "C:/Users/xx/Documents"
可以看到,我的R语言在我的文档中(Documents),进入这个文件夹,新建一个txt文件
2.2.2 新建txt文件
把之前默认的路径找到,比如我的是这两个
> .libPaths()
[1] "C:/Users/xx/AppData/Local/R/win-library/4.2"
[2] "C:/Program Files/R/R-4.2.1/library"
整理好内容:
C:/Users/xx/AppData/Local/R/win-library/4.2
C:/Program Files/R/R-4.2.1/library
新增加的是:
C:\\Users\\xx\\Documents\\R\\win-library\\4.2
把这三个路径放到txt文件中,用引号包裹。注意,这里的/
和\\
是等价的,用哪一种都可以。
txt文件内容:
.libPaths(c(
"C:/Users/xx/AppData/Local/R/win-library/4.2",
"C:/Program Files/R/R-4.2.1/library",
"C:\\Users\\xx\\Documents\\R\\win-library\\4.2"
))
注意:
- 每个路径,都要用引号包括
- 前两个路径,后面有个逗号
- .libPaht(c()),括号和代码不要省略
- 需要根据自己的路径进行修改,上面是我的路径
2.2.3 将txt重命名
名称为:
.Rprofile
注意,这里txt后缀修改了,上面就是全名
修改时,会让你判断是否修改,点击Y
修改后的文件是这个样子的:
2.2.4 重启进入Rstudio或者R语言
查看R的librayr路径:
> .libPaths()
[1] "C:/Users/xx/AppData/Local/R/win-library/4.2"
[2] "C:/Program Files/R/R-4.2.1/library"
[3] "C:/Users/xx/Documents/R/win-library/4.2"
发现已经修改完成。
载入R包试一下:
完全没问题。
3. 升级R语言
这里,单纯的将R4.1的包copy了一份为R4.2,但是有些包可能需要升级,一行代码解决:
update.packages(checkBuilt=TRUE, ask=FALSE)
然后等待完成,就可以顺畅的使用了