继续学R:重新装R / Installing R from source (3) 再也不装R了

之前为了解决PNG图片绘制以及–enable-R-shlib带来的性能折扣(其实我并不是很在意这个)问题,我决定再次重新装R。然后并没有解决我的问题,感觉好像掉进更深的坑里。


(图源 :pixabay)

然后有些家伙竟然要往坑里填土,着实太坏了。你以为填上土,落井下石就可以打倒O哥?太幼稚!再坑里填上土,浇点水,到了秋天,会长出好多好好O哥的。

哦,其实没用到秋天,用了几近一天的时间,O哥从坑里爬出来啦。

问题

之前说到第二次从源码重新装R并没有解决类似如下语句出错的问题:

png(file = "barchart.png")

看了一下,PNG、X11、cairo状态都是FALSE

我的要求并不高,png()能正常绘图就行。

思路

那么如何解决这个问题呢,我又开始疯狂搜索模式,大致有以下几个思路:

  • Linux下装X11 Server
    sudo apt-get install xorg openbox
  • 不装X,安装 virtual framebuffer X11 server
    apt-get install xvfb xauth xfonts-base
    xvfb-run
  • 配置X11转发(Xming等)
    #vi /etc/ssh/sshd_config
    X11 Forwarding yes
  • 使用cairo

前三种方式我没有去核实,仅供参考,接下来我们来看看第四种方式,使用cairo

cairo

对于我们遇到的问题,很多回答都建议png()前加上如下语句:

options(bitmapType='cairo')

原因是,R中png()使用默认的基于X11的设备,而我们的X11状态为FALSE,当然就用不起来了,上述语句的意思是让png()换用cairo

Cairo是一个2D图形库,支持多种输出设备。可是在回头看我们的输出

cairo状态也是FALSE,这就尴尬了啊。

于是使用如下命令安装Cairo

sudo apt-get install libcairo2-dev libxt-dev

然后重做R的编译配置

注意红框部分,对比一下我上个帖子中的截图:

哈哈,Cairo冒出来啦。

解决

然后就简单了,重新编译&安装,再来看一下

来试试上述方案工作不?

options(bitmapType='cairo')
png(file = "barchart.png")

耶,一切正常。但是每次都多敲一行是不是很别扭。这个文章下边的回答中给出了一个方案

vi .Rprofile
options(bitmapType='cairo')

关于.Rprofile,可以参考Customizing Startup

总结

好在解决了,不然在坑里的感觉真不好受。让我重新折腾一遍,我不确定我能否正确无误的装R(还好不是X语言),这玩意太折磨人了。

我觉得以后再也不装R了😭

相关链接


This page is synchronized from the post: 继续学R:重新装R / Installing R from source (3) 再也不装R了

别让贫穷限制了想象力,没事去京东只逛不买

这两天疯狂长草Intel 新出的NUC8I7HVK4,叫什么哈迪斯冥王峡谷,配置是i7-8809G + AMD Radeon RX Vega M GH独立显卡。京东售价是¥7999大洋,也就是说¥8000。

这玩意是准系统,需要自己配硬盘和内存,内存我我观察的是金士顿(Kingston)骇客神条 Impact系列 DDR4 2400 16GB笔记本内存,16G单条价格为¥1499.0,两条就是¥3000。

硬盘看的是三星(SAMSUNG) 970 PRO 1TB M.2 NVMe 固态硬盘,价格是¥4499.00,两条就是¥9000。让我来算算全套下来多少钱,8000+3000+9000 = 20000 大洋。

OMG,还好京东这个主机没现货,硬盘更是没货,否则我都选完了又不买岂不是很尴尬,之所以不买其实并不是因为差钱,而是太贵了(和差钱有啥区别呢?😳),这就好比原计划在三线四线县城买个80平左右的房子,然后去北上广看豪宅,看看罢了。


网上有个段子:

贫穷限制了你的想象力、吸引力、亲和力、战斗力、意志力、购买力、影响力、凝聚力、创造力、竞争力、执行力、公信力、驾驭力、生命力、注意力、感染力、理解力、弹跳力、免疫力、巧克力。

对于我而言,避免因为贫穷限制想象力、吸引力、亲和力、战斗力等等的方法就是时常逛逛京东。比如看看18核36线程,价格高达1.4W的Intel Core I9 7980XE CPU。

又比如价格高达1.7W的芝奇(G.SKILL)幻光戟系列 DDR4 3200频率28G(16Gx8)套装台式机内存

有比如价格高达三万元的英特尔(Intel)P4600系列 3.2T U.2接口 固态硬盘


好吧, 我承认我的想象力也就如此了,前些天在微信群里看到一个朋友买了一张价值105W的床垫,我真的想吐槽一句:

贫穷限制我的想象力、吸引力、亲和力、战斗力、意志力、购买力、影响力、凝聚力、创造力、竞争力、执行力、公信力、驾驭力、生命力、注意力、感染力、理解力、弹跳力、免疫力、巧克力。

终归还是被限制了,看来我去京东只逛不买,终归突破不了贫穷的限制啊。默默地关掉京东,看来我得找个新方法突破限制了,比如说淘宝?😭


貌似这个很适合我呀,可惜我家的浴缸有点小,咋办呀?


This page is synchronized from the post: 别让贫穷限制了想象力,没事去京东只逛不买

继续学R:重新装R / Installing R from source (2) 又掉坑里了😭

上篇文章写到在Linux系统下安装R的开发环境,尽管最终R运行了起来,但是其实有很多坑。

其中一个坑是由于--enable-R-shlib带来的性能折扣,而其实我并不需要或者至少目前不需要R的动态库(libR.so),所以加这个选项纯属多此一举。

另外一个坑是X11报错时我直接加上了--with-x=no配置选项,但是在我使用绘图功能时,比如png(file = "barchart.png")会提示如下错误信息:

Error in png(file = “barchart.png”) : X11 is not available


(图源 :pixabay)

这真是应了我前文中的一句话:你以前偷的懒,都会在以后找回来的。既然如此,那么就重新装R,尝试避免这些问题吧。

准备工作和其它

这部分和之前的文章没啥区别,参考继续学R:在Linux下源码方式装R / Installing R from source,对应部分吧。

无非是:

  • 更新系统
  • 下载软件
  • 安装编译工具

因为这些我都做过啦,无需再做一遍。由于我是重装,所以可以使用个新目录,这样就可以对比两个安装的差异了,不过我懒得比啦,直接清空原来的内容好了。

rm -rf /opt/R/*
(或者用make uninstall)

如果没有装过Fortran编译器,需要记得装上gfortran

sudo apt-get install gfortran

因为我们主要遇到的是X11的问题,所以直接装上对应的软件包吧。在R Installation and AdministrationEssential-programs-and-libraries章节中,有如下内容:

Unless you do not want to view graphs on-screen (or use macOS) you need ‘X11’ installed, including its headers and client libraries. For recent Fedora/RedHat distributions it means (at least) RPMs ‘libX11’, ‘libX11-devel’, ‘libXt’ and ‘libXt-devel’. On Debian/Ubuntu we recommend the meta-package ‘xorg-dev’. If you really do not want these you will need to explicitly configure R without X11, using –with-x=no.

我试着在我的系统下使用如下命令:

sudo apt-get install libx11-dev

虽然也可以安装成功libx11-dev,但是配置的时候还是提示:

configure: error: –with-x=yes (default) and X11 headers/libs are not available

所以在我的系统下(Raspbian)使用以下命令才是正解

sudo apt-get install xorg-dev

配置R编译选项

执行如下命令,进行编译选项配置

./configure --disable-java --prefix=/opt/R

原以为会一路畅通,结果却报如下错误:

checking whether PCRE support suffices… configure: error: pcre >= 8.20 library and headers are required

研究和尝试了半天,发现以下命令可以解决这个问题。

sudo apt-get install libpcrel3-dev

重新进行编译选项配置

./configure --disable-java --prefix=/opt/R

一切顺畅,结果如下:

编译 & 安装

剩下的就简单喽,执行如下命令进行编译和安装

make
make install

注意:
R生成的Makefile可能有问题,make完了,执行安装时,会出如下错误(尽管之前我已经make clean了)

/usr/bin/install: cannot stat ‘NEWS.pdf’: No such file or directory

解决的方法是,删除原来的源码目录,重新解压源码包,重新进行整个流程。

设置软链接(我的软链接还在,可以略过这步)

cd /usr/bin
sudo ln -s /opt/R/bin/R R
sudo ln -s /opt/R/bin/Rscript Rscript

安装成功后让我们测试一下:

R


一切正常。

然后试一下:

png(file = "barchart.png")

扎心了

继续
capabilities()

😭看来我没法从坑里爬出来了?谁来拉我一把?

相关链接


This page is synchronized from the post: 继续学R:重新装R / Installing R from source (2) 又掉坑里了😭

小花 & 如何辨别种类

路遇漂亮的小花🔅,贴近拍一下,别有一番感觉呢。是不是可以假装自己出去旅游了,比如说去什么普罗旺斯的薰衣草园?

不过想必了解我的都知道我这个宅男,宅才是永恒的主题。所以别说什么弄几张图片假装去旅游,就是真的去旅游也没人信呢。

093030.jpg

093020.jpg

092947.jpg

093000.jpg

093132.jpg

突然想,虽然我拍的小蓝花有点像薰衣草,但是连我这种外行也知道它不是薰衣草,但是是什么我就不清楚了。那么除了问别人,有没有什么方式知道小蓝花的名字呢?答案是有的,就是使用搜索引擎的图片搜索功能。

百度为例,打开百度,点击红框中点相机图标:

选择本地上传图片:

在弹出文件选择对话框中选择我们的图片,然后奇迹出现啦:

所以我们知道了,我拍的小花属于蓝花鼠尾草(学名:Salvia farinaceaBenth.),是唇形科鼠尾草属。而薰衣草在植物学分类上也属于唇形科,原来他们是近亲呢,难怪我傻傻的分不清呢。

所以搞不清小花种类可不能随便发图装作去旅游,否则我和别人说我去的普罗旺斯的薰衣草园,被人拆穿后就变成了鼠尾草园,虽然我觉得看起来也很漂亮,但是听起来咋就不那么高大上呢?😔


This page is synchronized from the post: 小花 & 如何辨别种类

继续学R:在Linux下源码方式装R / Installing R from source

之前为了体验一下R,随便用sudo apt-get install r-base r-base-dev装了个R,合计反正就是体验一下,没必要像正规军一样搞得很复杂。然后今天发现一个真理,就是你以前偷的的懒,都会在以后找回来的


(图源 :pixabay)

话说昨天别人问我个小问题,用到quantmod这个东东,甭管它是啥,先装着试试呗。

install.packages('quantmod')

结果想象中的一路yes,顺利安装被没有出现,而是我给我个提示:

package 'quantmod' is not available (for R version 3.1.1)

原本以为我无往不利的搜索大法应该很快解决这个问题,结果这次找了N多网页却没有找到答案,满头雾水的我最后终于意识到,是我的R的版本太旧了😭。好吧,先不管这个quantmod,升级版本先,想用最新版本的最好方式当然是从源码安装了,说干就干,源码安装走起。

准备工作

更新系统

首先更新一下系统

sudo apt-get update
sudo apt-get upgrade

无论干点啥,先更新一下,身体倍棒,吃嘛嘛香。

创建目标目录

sudo mkdir /opt/R
sudo chmod 777 /opt/R

我瞎建个目录安装,要是没啥问题的话,其实可以使用默认目录的。

下载源码

https://www.r-project.org/ 找一下最新的源码,我找到的最新的是这个:

R version 3.5.0 (Joy in Playing) has been released on 2018-04-23.

点进去之后,找到下载链接:https://cran.r-project.org/src/base/R-3/R-3.5.0.tar.gz),在Linux系统下执行如下命令,将其下载到本地,解压,并进入目录

wget https://cran.r-project.org/src/base/R-3/R-3.5.0.tar.gz
tar xzvf R-3.5.0.tar.gz
cd R-3.5.0

安装必要编译工具

其实我也不知道应该按啥,因为不知道系统都有啥,缺啥按啥吧。 因为我的系统上曾经按过不少东西,所以没提示缺啥😳。

配置 R

配置我参考的Installing-R-under-Unix_002dalikes,可以使用如下命令查看详细帮助:

./configure --help

一切默认的话,执行如下命令即可

./configure

我手欠,先是执行这个配置命令:

./configure --enable-R-shlib --prefix=/opt/R

其中:

  • --enable-R-shlib
    将R编译成动态库(libR.so),然后R的执行程序与之链接。加这个纯属我手欠,因为我没有想在其它语言中集成R,并且设置这个选项会影响性能,不过我如实记载我的操作,就放这了。
  • --prefix=/opt/R
    这个指定安装目录,否则会安到默认的目录中。

等半天后提示我系统没有X11,我懒得装X,直接禁用吧(这块有坑,以后再说)

./configure --enable-R-shlib --with-x=no --prefix=/opt/R

编译 R

配置成功后,执行如下命令进行编译:

make

结果等半天后出现如下错误信息:

configuring Java … Cannot find any Java interpreter Please make sure ‘java’ is on your PATH or set JAVA_HOME correspondingly。

晕,这难道不应该在配置阶段报错吗?反正我也不用什么JAVA(估计和我启用--enable-R-shlib有关),重新配置:

./configure --enable-R-shlib --with-x=no --disable-java --prefix=/opt/R

再次编译,成功!然后执行安装命令:

make install

收尾

测试一下,启动R:

/opt/R/bin/R


已经是最新版本喽。

创建软链接,方便访问

cd /usr/bin
sudo ln -s /opt/R/bin/R R
sudo ln -s /opt/R/bin/Rscript Rscript

补充说明

R的编译和运行需要Fortran编译器以及运行时库支持,我后来不小心卸载了,也运行不起来,也配置和编译不了了。

运行R提示:

/opt/R/lib/R/bin/exec/R: error while loading shared libraries: libgfortran.so.3: cannot open shared object file: No such file or directory

重新配置则提示:

configure: error: No F77 compiler found

重新安装Fortran编译器,解决问题

sudo apt-get install gfortran


总算把R搞到最新版本啦,否则拿明朝万历年间的R来学习,是有点落伍呢。不过这个不完美,有坑,下篇文章再说咋个坑法吧。

相关链接


This page is synchronized from the post: 继续学R:在Linux下源码方式装R / Installing R from source

周末路遇的一小事

周末坐公交外出办事,回来时我从始发站上车,坐在后边,吹着空调,看着窗外的风景,悠哉悠哉。


(图源 :pexels.com)

开到第四、五站的时候,有一女士欲从前门上车,然后司机说了句什么,我没听清。然后就听这个女的大声质问:“为什么?” 一下子吸引的全车人的目光。我瞄了一眼,是个漂亮时尚的女人,年纪约30多岁吧。咳咳,一看是“美女”,我瞪大眼睛看发生了什么事。

这时候司机也提升了音量,回答到:“没有为什么,公司规定,不允许乘客带宠物乘车”。这时候我才注意到美女的怀里抱着一个小小的宠物狗🐕,看起来很可爱的样子。这时候后边乘客着急上车,然后和那女士说“借过”,就把那女士从车门的台阶下挤了下来。

尽管我其实对宠物狗没什么反感,相反的因为种种原因,我还是很喜欢狗狗的。但是我还是很支持公交公司的决定,毕竟嘛,公交车人很多,带宠物上来一旦携带病菌就可能传染给他人,况且虽然大多数狗狗都很温顺,一旦发起疯来咬人就麻烦了。公交车上还有不少小孩子,所以不让宠物上车是很正常且合理的规定。


(图源 :pexels.com)

然后随后发生了让人目瞪口呆的一幕,这个“美女”,突然发起疯来,哐哐踹了公交侧面几脚,然后一边离开一边转头对公交司机破口大骂,污言秽语不堪入耳。一个乍看起来很是时尚、温婉的女子,突然变身泼妇,真是惊落了一地眼球。

好在公交司机并没有和她一般见识,默默地关上车门,发动车子,走起,留在那个疯狂的泼妇在风中凌乱。我在心里默默地为公交司机点个👍,换作他人,没准就会停下车来,跟这个女子好好理论一下吧,估摸我们这一车人的时间就被耽误了。

明明是很正常的规定,我们按规定行事就好,大多数时候大多数人都会为这样合情合理的规定点赞,可是有时候恰恰是因为触犯了某些人自己的利益,那么这些规定就成了讨伐谩骂的对象,而这某些人,平时往往又无比期望别人都按规矩办事。

大多数时候,我们都希望别人遵守规矩,而我们自己却希望这些规矩条款对自己网开一面,或者以破坏和践踏规矩为荣。殊不知,如果人人都这样想,那么规矩就成了摆设,最终侵犯的是我们所有人的利益。


(图源 :pexels.com)

希望这“美女”事后反思一下吧,只有外在和内涵都美,才是真的美吧。


This page is synchronized from the post: 周末路遇的一小事

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×