:::

R套件怎麼裝不起來?Ubuntu中舊版R安裝套件的方法 / How to install archived packages in old R version?

image

因為Windowd的R處理中文的時候無法避免亂碼的問題,所以我改用OpenVZ架起Ubuntu 14.04 (amd64),並在上面安裝RRStudio Server來運作。然而這版Ubuntu上面安裝的R版本為3.0.2,並非最新的3.0.3,大部分套件都不能正常安裝。儘管如此,我們還是可以透過手動的程序來下載、安裝舊版的套件。這篇以RMySQL套件為例,教大家如何在舊版R中安裝對應版本的舊版套件,而且一併處理系統套件相依的問題。


無法安裝R的套件? / Why I cannot install R’s package?

以RMySQL為例,R安裝套件的語法如下:

install.packages("RMySQL")

但如果你執行的時候出現下面的錯誤訊息:

image

> install.packages("RMySQL")
Installing package into ‘/home/rstudio/R/x86_64-pc-linux-gnu-library/3.0’
(as ‘lib’ is unspecified)
Warning in install.packages :
  package ‘RMySQL’ is not available (for R version 3.0.2)

那就表示你的R版本3.0.2太舊了,不符合該套件所要求的版本。這下子怎麼辦好呢?

查詢R版本的發佈日期 / Find your R version’s publish date

在找尋舊版套件之前,我們要先確定你目前R版本的發佈日期是什麼時候。查詢R版本的語法如下:

sessionInfo()

image

我們可以從輸出訊息中找到類似以下的資訊:

R version 3.0.2 (2013-09-25)

因此可以得知,在這台伺服器上使用的R版本3.0.2它的發佈日期是2013年9月25日。這個發佈日期很重要,我們要找位在這個發佈日期之前的舊版套件。


開啟舊版套件網址 / Archived package's URL

R的舊版套件都封存在cran保存庫上,網址是:

  • https://cran.r-project.org/src/contrib/Archive/[PACKAGE_NAME]/

其中網址的最後一段[PACKAGE_NAME]是R套件的名稱,大小寫有差別。以RMySQL為例,查詢RMySQL封存套件的網址就是:

找尋並下載合適的舊版套件 / Find and download the suitable archived package

2016-11-06_135249

RMySQL封存套件的網頁長得像上圖一樣。這是Apache檔案列表,裡面除了列出RMySQL套件各版本的下載位置之外,還有該套件最後修改(Last modified)的日期。

image

因為我們使用的R 3.0.2發佈日期為2013-09-25,所以我們要找在這個日期之前最新的套件。往下找找就可以發現有個套件發佈日期是2012-01-17,而下一個套件就跳到2015年發佈,因此2012-01-17的RMySQL_0.9-3.tar.gz就是我們要找的合適舊版套件。該套件的網址如下:

請複製這個網址,待會我們會用到它。

下載套件 / Download Package

R可以直接從URL下載檔案,語法如下:

download.file("https://cran.r-project.org/src/contrib/Archive/RMySQL/RMySQL_0.9-3.tar.gz", "RMySQL_0.9-3.tar.gz")

2016-11-06_135813

下載成功之後,R運作目錄會出現「RMySQL_0.9-3.tar.gz」套件檔案。如下圖:

image

接下來我們就要來安裝它啦。

安裝套件檔案 / Install package from offline file

從下載下來的套件檔案進行安裝的語法如下:

install.packages("RMySQL_0.9-3.tar.gz", repos = NULL, type="source")

2016-11-06_105451

安裝進行中……不過……

image

出現了的錯誤訊息:

Warning in install.packages :
  installation of package ‘/home/rstudio/RMySQL_0.9-3.tar.gz’ had non-zero exit status

這表示RMySQL套件沒有安裝成功。這是為什麼呢?


Linux需要安裝對應開發版套件 / Need development package installation in Linux

如果往上翻安裝記錄,我們發現出現了以下訊息:

Configuration error:
  could not find the MySQL installation include and/or library
  directories.  Manually specify the location of the MySQL
  libraries and the header files and re-run R CMD INSTALL.

這個意思是我們的作業系統Linux (或是Ubuntu)本身需要安裝MySQL的套件,RMySQL才能正常安裝。

換句話說,如果R套件本身有用到Linux上面的外部工具,那Linux也需要安裝對應的開發版本套件,R套件才能正常安裝。在R套件的網頁上會註明「SystemRequirements」,就表示這是需要作業系統事先安裝的套件。例如RMySQL所需要的套件就包括「libmariadb-client-dev | libmariadb-client-lgpl-dev | libmysqlclient-dev (deb), mariadb-devel (rpm), mariadb | mysql-connector-c (brew), mysql56_dev (csw)」。

到目前為止,我遇過需要這樣處理的套件如下,如果要做apt-get安裝,請到Linux的Bash指令環境下執行,這不是R喔:

  • rJava:需要安裝JDK。Ubuntu上面的安裝JDK方法如下:
    apt-get install -y default-jdk
    但是安裝完成之後,還需要連結libjvm.so,做法請看這篇
  • RPostgreSQL:需要安裝 postgresql-devel,安裝方法如下:
    apt-get install -y postgresql-devel
  • RMySQL:需要安裝libmysqlclient-dev,方法如下:
    apt-get install -y libmysqlclient-dev
在Bash中安裝libmysqlclient-dev / Install libmysqlclient-dev

為了安裝RMySQL套件,我們需要安裝libmysqlclient-dev套件。在Ubuntu中,我們通常使用apt-get進行套件的安裝。apt-get安裝libmysqlclient-dev套件的語法如下:

apt-get install -y libmysqlclient-dev

2016-11-06_105918

順利安裝完成。

再次安裝RMySQL套件 / Install RMySQL package again

如果順利安裝完成的話,我們回到R裡面,再次執行RMySQL套件的安裝語法:

install.packages("RMySQL_0.9-3.tar.gz", repos = NULL, type="source")

2016-11-06_110016

看到以下訊息:

* DONE (RMySQL)

就表示RMySQL順利安裝完成囉。


R套件下載、安裝、刪除 / R Script for Package's Download, Install and Remove

為了方便大家下載,我把上述語法整合起來做成查詢功能。來試試看吧:(完整程式碼可以上CodePen查看)



結語 / Conclusion

這篇大概總結了目前安裝R套件最可能遇到的各種問題的處理方法。雖然rJava的處理方式比較複雜了一點,但大多不擺脫:1. 找尋錯誤訊息;2. Google;3. 嘗試解決 的流程。

一開始是因為Windows上一直沒辦法解決R處理中文會是亂碼的問題,所以才改到Ubuntu中來使用R。可是沒想到不同版本的Ubuntu,所能安裝的R版本也有所不同。本文使用的Ubuntu 14.04最多只能安裝到R 3.0.2,而且Ubuntu 12.04的R最多也只能裝到2左右的版本。更糟糕的是,R套件安裝語法install.packages()並沒有自動向下相容的功能,安裝套件時會直接指定最新的版本,而最新的版本就不會相容舊的R。

不知為何,這個問題很少人提及。好像大家都是安裝最新版的R,所以理所當然地可以安裝最新版的套件。但是像是舊版作業系統被限制不能安裝最新版R的情況,就很少人關注了。

除了安裝套件之外,我在安裝RStudio Server遇到登入後無回應的問題、以及在Ubuntu上設定全UTF-8環境這邊也花了很多時間來處理,而且目前安裝的RStudio Server不知為何還是不能Upload檔案。總之遇到什麼問題就一個問題解決吧,果然事情沒有那麼單純啊。

總共3 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 中文斷詞器Rwordseg安裝方法:
    install.packages("Rwordseg", repos="http://R-Forge.R-project.org")

    請看這一頁
    https://r-forge.r-project.org/R/?group_id=1054

    回覆刪除
  2. https://www.digitalocean.com/community/tutorials/how-to-set-up-r-on-ubuntu-14-04
    感謝這篇的教學,現在R總算升到最新的3.3.2了

    回覆刪除
  3. R Package Download & Install & Remove
    http://codepen.io/pulipuli/pen/NbqdRx

    稍晚我再把這個程式碼加到文章中。

    回覆刪除