R升級版本

起因:在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並安裝

  1. 找到國內鏡像下載並安裝。
  2. Rstudio可以不更新,允許電腦中存在多個R版本。在Rstudio的全局選項中設置一下使用哪個R版本即可。注意退出重啓程序才生效。
    在這裏插入圖片描述
    change選項:
    在這裏插入圖片描述
  3. 原來的包不復存在,要重新安裝。
    首先,打開老版本的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的包

  1. library() 在新窗口中查看已經安裝的包的列表。
  2. installed.packages() 在控制檯查看各個包的安裝路徑、版本號等信息。
  3. .packages(all.available=T) 在控制檯中顯示已安裝包的名字,只顯示包的名字。
  4. help(package=“包的名稱”) 在新窗口中查看包內的函數及說明。
  5. getOption(“defaultPackages”) 查看默認加載的包,忽略基本的包。
  6. (.packages()) 查看當前已經加載過的包。
  7. (.packages(all.availabel=TRUE)) 查看所有可用的包。
  8. detach(package:包的名稱) 卸載包。主要是爲了避免某些包中的函數名稱相同,造成衝突,注意與library()的參數不同。

注3:調用R包

library() 和 require() 都可以。區別在於:
library() 只是加載包,加載成功不顯示任何信息;加載失敗纔會顯示錯誤提示。
require() 會有返回值,如果加載成功,返回值爲TRUE,顯示加載的包的名稱;如果加載失敗,返回值爲FALSE,顯示警告提示。
library() 加載速度快,日常操作更常用。 require() 有返回值,更多用於編程。

注4:在文章中引用包

citation(package = “ggplot2”)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章