Calm Hill My Random Thoughts

Upgrading R Packages

R မှာအမြဲတမ်း ပြဿနာလုပ်လေ့ရှိတာက Packages တွေနဲ့ R Version Upgrade ဖြစ်လိမ့်မယ်။ R ရဲ့ Version ကလည်း မကြာခဏပြောင်းလေ့ရှိသလို Packages Library တွေရဲ့ Default Location က R ရဲ့ Minor Version ကိုယူသုံးလေ့ရှိတယ်။ လွန်ခဲ့တဲ့ ၃ နှစ်လောက်က R Version Upgrade and Installed Packages ရေးခဲ့ဖူးပေမယ့် Install လုပ်ထားတဲ့ Packages တွေများလာတော့ R Version အဟောင်းနဲ့ Compile လုပ်ထားတယ်ဆိုရင် Version အသစ်မှာ အလုပ်မလုပ်တဲ့ Package တွေရှိတာ သတိထားမိလာတော့ နောက်မျိုးကြံရပြန်တယ်။

ပထမဆုံးအနေနဲ့ .Renviron မှာ R_LIBS_USER ဆိုပြီးတော့ Package တွေကို Install လုပ်ရမယ့် နေရာကိုသွားပြီးတော့ ကြေငြာထားတယ် ဥပမာဆိုရင် 3.5.x အတွက်ဆိုရင် ~/R/3.5/site-library 3.6.x အတွက်ဆိုရင် ~/R/3.6/site-library လို့သုံးလိုက်တယ်။ .Renviron ထဲမှာတော့ %v ဆိုတဲ့ Variable ကို ယူသုံးမယ်ဆိုရင် Minor Version ကို ဖတ်လို့ရတယ်ဆိုတော့ ~/R/%v/site-library လို့တခါပဲ ရေးဖို့လိုပါတယ် Version တခုပြောင်းတိုင်း ပြင်ရေးပေးစရာ မလိုပါဘူး။

.Renviron

R_LIBS_USER=~/R/%v/site-library

R Version Upgrade ဖြစ်သွားရင် Library Location က အသစ်ဖြစ်နေတော့ Package တွေကို ယူသုံးတယ်ဆိုရင် Install မလုပ်ထားဘူးပဲ ပြောဦးမှာပါပဲ။ အလွယ်ဆုံးကတော့ R Version အသစ်ဖြစ်သွားရင် Package တွေကို ပြန်ပြီးတော့ Install လုပ်ဖို့လိုလိမ့်မယ်။ ဒီကိစ္စကလည်း ထင်သလောက်မလွယ်ပါဘူး တခါတခါကိုယ် Install လုပ်ထားတဲ့ Package စာရင်းဟာ ကိုယ်လည်းမမှတ်မိဘူး တချို့လူတွေကတော့ Variable တခုထဲမှာ Install လုပ်ထားတဲ့ Package တွေကို မှတ်ထားပြီးတော့ Re-Install ပြန်လုပ်တယ်ဆိုပေမယ့် မမေ့မလျော့နဲ့ ထိမ်းသိမ်းဖို့ သိပ်မလွယ်လှဘူး။

နည်းနည်းဘိုင်ကြံကြံလိုက်တာက 3.5.x ကနေ 3.6.x ကို Upgrade လုပ်တယ်ဆိုရင် ~/R/3.5/site-library ကို ~/R/3.6/site-library ဆိုပြီးတော့ Copy အရင်ကူးလိုက်ပြီးတော့ သုံးလိုက်တယ်။ တချို့ Package တွေက Compile လုပ်ဖို့လိုတယ်ဆိုပြီး ပြဿနာလုပ်တဲ့အခါမှပဲ Package တွေကို Upgrade လုပ်လိုက်တယ်။ Upgrade လုပ်တဲ့နေရာမှာ အရေးကြီးတာက checkBuilt = TRUE ဆိုတဲ့ Option ကို Enable လုပ်ပေးဖို့လိုတယ်။ checkBuilt = TRUE ပေးလိုက်မှသာ Install လုပ်ပြီးသား Package တွေ Version အသစ်မထွက်လည်း R Version အသစ်နဲ့ဖြစ်နေရင် Re-compile ပြန်လုပ်ပေးလိမ့်မယ်။ မကောင်းတာတခုက Package က Update ထွက်နေရင် Upgrade လုပ်သွားမှာဆိုတော့ Reproducible Research အတွက်ဆိုရင်တော့ သိပ်ပြီးအဆင်မပြေဘူး ဒါပေမယ့် ကိုယ့်အတွက်ကတော့ အဲလောက်ပြဿနာရှိတဲ့ အလုပ်လုပ်တာမဟုတ်တော့ ဒီလောက်ဆိုရင် အဆင်ပြေပါတယ်။

Checking Packages with Previous R Version

old.packages(checkBuilt = TRUE)

Upgrading and Re-Compiling Old Packages

update.packages(checkBuilt = TRUE, ask = FALSE)

Upgrade လုပ်ရင်းနဲ့ xml2 install မလုပ်ထားဘူးဆိုပြီး အောက်မှာပြထားသလို ပြဿနာထပ်ထွက်ပြန်တယ်။

xml2 Errors

* installing *source* package ‘xml2’ ...
** package ‘xml2’ successfully unpacked and MD5 sums checked
** using staged installation
Found pkg-config cflags and libs!
Using PKG_CFLAGS=-I/usr/include/libxml2
Using PKG_LIBS=-L/usr/lib -lxml2 -lz -lpthread -licucore -lm
------------------------- ANTICONF ERROR ---------------------------
Configuration failed because libxml-2.0 was not found. Try installing:
 * deb: libxml2-dev (Debian, Ubuntu, etc)
 * rpm: libxml2-devel (Fedora, CentOS, RHEL)
 * csw: libxml2_dev (Solaris)
If libxml-2.0 is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a libxml-2.0.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
--------------------------------------------------------------------
ERROR: configuration failed for package ‘xml2’
* removing ‘/Users/yelin/.R/packages/xml2’
Warning in install.packages :
  installation of package ‘xml2’ had non-zero exit status

Homebrew ရဲ့ Package တွေမှာ လိုက်စစ်တော့လည်း Install လုပ်ထားတယ်ဆိုတော့ အတော်ခေါင်းခြောက်ရတယ်။ ရှာရင်းဖွေရင်းနဲ့မှ Mac မှာ OS ကို Upgrade လုပ်ထားရင် Header Library တွေကို ပြန်ပြီးတော့ Install လုပ်ရတယ် မလုပ်ထားရင် Header Files တွေရှာမတွေ့တဲ့အတွက် Compile လုပ်တဲ့အချိန်မှာ Error တက်တယ်ဆိုတဲ့ Issues တခုကို ရှာလို့တွေ့တော့မှပဲ ပြဿနာပြေလည်သွားတယ်။

macOS SDK Headers

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

xml2 ပြီးတော့ igraph ဆိုတဲ့ Package နဲ့ထပ်ပြီးတော့ ပြဿနာထပ်ဖြစ်တယ်။ တကယ်တမ်း သူ့ပြဿနာက R နဲ့ တိုက်ရိုက်ဆိုင်ပေမယ့် ကိုယ့်စက်က အစုံသုပ်ဆိုတော့ Install လုပ်ထားတဲ့ Software Package တော်တော်များရှိတယ်။ ဖြစ်ချင်တော့ SUNDIALS ဆိုတဲ့ သင်္ချာနဲ့ဆိုင်တဲ့ Software တခုကို Install လုပ်ထားမိတယ်။ SUNDIALS ရဲ့ Dependency အနေနဲ့ပါလာတဲ့ suite-sparse ဆိုတဲ့ Library တခုနဲ့ igraph နဲ့ဟာ နည်းနည်းပြဿနာရှိတယ်။ suite-sparse ကိုလည်း Uninstall လုပ်လို့မဖြစ်တော့ igraph ကို Upgrade မလုပ်ခင်မှာ suite-sparse ကို unlink လုပ်လိုက်တယ် Upgrade လုပ်ပြီးတော့မှ link ပြန်လုပ်ထားလိုက်တော့ အဆင်ပြေသွားတယ်။

igraph

brew unlink suite-sparse
brew link suite-sparse

ဖြစ်နိုင်ရင် Software တွေဟာ Upgrade မလုပ်ချင်ဘူး ဒီတခေါက် 3.5 ကနေ 3.6 ကိုပြောင်းတာ ၂-၃ ရက်လောက် အလုပ်ပျက်သွားတယ်။ နောက်တခါ Upgrade လုပ်ရင်လည်း ကြုံရဦးမှာပဲဆိုတော့ Library တွေ Copy ကူးတာ Upgrade လုပ်တာတွေကို .Rprofile ထဲမှာ Automate လုပ်ဖို့အတွက် ရေးထားဖို့စဉ်းစားပေမယ့် မအားတဲ့အတွက် မလုပ်နိုင်သေးဘူး မကြာခဏဖြစ်နေတဲ့ ပြဿနာဆိုတော့ ရေးတာကတော့ အနှေးနဲ့အမြန် ရေးတာကတော့ ရေရဦးမှာပါပဲ။

References

  1. update.packages - https://www.rdocumentation.org/packages/utils/versions/3.6.0/topics/update.packages
  2. Installation failure on macOS 10.14 - https://github.com/r-lib/xml2/issues/232
  3. Fails to install on Mac OS X 10.11 - https://github.com/igraph/rigraph/issues/135