起因:在R中安裝包總是報錯:
Warning : 說是缺少Rtools,也打不開下載網址。
下載了Rtools但是這是個新軟件不是包,安裝後仍然不知道怎麼用。
於是想更新R版本
法一:在R GUI中通過包升級。但是可能會安裝到C盤,建議用法二。
install.packages("installr",destdir=) # 安裝升級所用的包
library(installr) # 加載installr包
check.for.updates.R() # 檢查版本
installr() # 升級
安裝過程會有一系列詢問框彈出,詢問諸如是否遷移舊R中的包,是否更新包等。
安裝完成後,刪除舊版本的R。
注意:其實安裝installr包後,會在RGui界面添加一個installr的菜單,進行菜單操作來升級。
法二:重新從官網下載R並安裝
- 找到國內鏡像下載並安裝。
- Rstudio可以不更新,允許電腦中存在多個R版本。在Rstudio的全局選項中設置一下使用哪個R版本即可。注意退出重啓程序才生效。
change選項:
- 原來的包不復存在,要重新安裝。
首先,打開老版本的R GUI,查看原來版本中已有的包,將包名寫入txt文件。
然後,在新版本驅動的Rstudio中,查看新版本已有的包。
將兩個包的集合做差集,即是老版本中有而新版本中沒有需要安裝的包。
最後,依次安裝即可。
老版本中:
have <- .packages(all.available=T) # 僅查看已安裝的包名,返回字符串向量
# 將其寫入文件
cat(have,file="D:\\Softwares\\R\\installed_pkgs.txt",sep='\n')
新版本中:
have <- .packages(all.available=T) # 新版本中已有的包
# 讀入老版本的包,變爲字符串向量
pre_have <- as.vector(t(read.table("D:\\Softwares\\R\\installed_pkgs.txt")))
# 集合運算 差集 A-B setdiff(A,B)
new <- setdiff(pre_have,have) # 將兩個集合進行差集運算
# 定義安裝函數
Ins_pkg <- function(name){
install.packages(name,destdir = "D:\\Softwares\\R\\R-4.0.0\\packages") # 安裝包
}
# 對差集中每個包調用該安裝函數
sapply(new, Ins_pkg)
最後,回到開頭的那個問題,安裝包總是報錯,怎麼解決的呢?
更換使用的鏡像就好了,從清華鏡像換到上海鏡像,並不需要更新R。
Anyway,有新版本還是建議使用新版本~
注1:集合運算
A和B交集:union(A,B)
A和B並集:intersect(A,B)
差集A-B:setdiff(A,B)
差集B-A:setdiff(B,A)
A是否屬於B:all(A %in% B)
B是否屬於A:all(B %in% A)
A和B是否相同:setequal(A,B)
某個元素a是否屬於A:is.element(a,A) 或 a %in% A
注2:查看R的包
- library() 在新窗口中查看已經安裝的包的列表。
- installed.packages() 在控制檯查看各個包的安裝路徑、版本號等信息。
- .packages(all.available=T) 在控制檯中顯示已安裝包的名字,只顯示包的名字。
- help(package=“包的名稱”) 在新窗口中查看包內的函數及說明。
- getOption(“defaultPackages”) 查看默認加載的包,忽略基本的包。
- (.packages()) 查看當前已經加載過的包。
- (.packages(all.availabel=TRUE)) 查看所有可用的包。
- detach(package:包的名稱) 卸載包。主要是爲了避免某些包中的函數名稱相同,造成衝突,注意與library()的參數不同。
注3:調用R包
library() 和 require() 都可以。區別在於:
library() 只是加載包,加載成功不顯示任何信息;加載失敗纔會顯示錯誤提示。
require() 會有返回值,如果加載成功,返回值爲TRUE,顯示加載的包的名稱;如果加載失敗,返回值爲FALSE,顯示警告提示。
library() 加載速度快,日常操作更常用。 require() 有返回值,更多用於編程。
注4:在文章中引用包
citation(package = “ggplot2”)