最近在Coursera上学一门数据分析的课程,因此得用用R。照例,总结一下Mac上的一些R配置,希望能帮到Mac的中文用户。
用Apple自己的包做并行加速
R的并行加速,最简单是用BLAS,也是其自带支持的;此外比较多人用的就是OpenBLAS和ATLAS。这两个都是需要单独编译包的。其实Apple自己就提供了并行运算的库,这里介绍的最简单方式就是直接使用每个Mac OS X系统里自带的库。
两条指令搞定:
cd /Library/Frameworks/R.framework/Versions/Current/Resources/lib
ln -sf /System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Versions/Current/libBLAS.dylib libRblas.dylib
如果需要恢复调用R自带的库:
ln -sf libRblas.0.dylib libRblas.dylib
从实际效果来看,运行R-benchmark-25.R来对比,大概可以从30多秒下降到9秒多(Retina MacBook Pro 2013late高配)。有兴趣装OpenBLAS的话,应该还能进一步提升。
SublimeKnitr的安装与配置
Knitr 是目前我知道的、中国人对R世界的最大贡献,一般来说是在RStudio上安装这个包后,支持在编辑器里用markdown、latex语法,同时嵌入R代码,编译后代码块会送到R来执行,最终形成一份HTML的报告(当然在Mac上就非常方便转为PDF)。包括Cousera上Duke University的这门数据分析与统计推断课程,Project都是用RMarkdown写并最终提交PDF。
RStudio本身是不错的编辑器,不过也好几百兆,对我这种毕竟很少用R的人来说,似乎没太大必要。因此第一时间放出google,发现国外也有网友将Knitr嵌入到Sublime Text 2/3里。也许是用户少,目前还不算很成熟,但基本可用,下面就是安装和一些配置步骤。
- 在R里安装Knitr:
install.packages('knitr', dependencies = TRUE)
当然,你也可以选择手工安装,不赘述了。 - 在Sublime Text里安装Enhanced-R和LaTeXing或LaTeXTools。
- 在Sublime Text里安装Knitr。这两步的安装都可以直接在ST里利用
Package Control
搜索并安装。 - 我根据Issue 7修改了build代码,也就是到Package目录里修改
knitr-Markdown.sublime-build
整个文件内容修改为:
{
"selector": "text.html.markdown.knitr",
"cmd": [ "Rscript -e \"library(knitr); knit('$file', output='$file_path/$file_base_name.md')\"; open $file_path/$file_base_name.md" ],
"shell": true
}
SublimeKnitr目前一个相对麻烦的问题是,不支持将.Rmd
文件放在含空格的路径下,中文路径不影响。如果你文档里的R代码生成图标,那么实际上会在R默认路径(注意不是Knitr,而是R的配置)生成一个figure
目录,里面就是图片。
以上完成后,一般就会自动识别.Rmd
文件了,正常编译后形成一个.md
文件。如果有图片,那么这里会有相对引用。Markdown Pro等一些软件不支持图片的相对引用方式,预览时会出问题,不妨还是通过ST打开,用Markdown Preview
来生成HTML好了。
正因为有生成文件的问题,因此建议还是不折腾路径了,将你需要做的报告直接放在R的默认路径下,也确保了一些R数据、源码文件等引用方便。
在RMarkdown里混用Latex
写文档的时候肯定会需要插入Latex来表达公式之类,但显然Markdown来写一整篇文章比用Latex来写一整篇要舒服好多(至少如果都是用文本编辑器手敲的话)。那么两者可以混用么?RMarkdown自身是支持inline Latex的,可以参见具体文档。
在这种情况下,需要MathJax来生成最终显示结果,ST本身编译出来以后的.md
文档只是原样保持了你的Latex代码而已。按照文档所述,你需要到MathJax网站转换,或者在你自己的网站上安装MathJax支持,以便最终的HTML正常显示。但有时候我们只是本机需要一个PDF(比如我要提交的这门作业)而已。又是一阵google,翻出来Reddit的一个实现方案。
在Safari里新建一个书签(为了方便可以放在书签栏上),随意命名,然后链接就是以下代码:
javascript:(function()%7Bvar%20script%3Ddocument.createElement(%22script%22)%3Bscript.type%3D%22text%2Fjavascript%22%3Bscript.src%3D%22http%3A%2F%2Fcdn.mathjax.org%2Fmathjax%2Flatest%2FMathJax.js%3Fconfig%3Ddefault%22%3Bvar%20config%3D'MathJax.Hub.Config(%7BTeX%3A%7Bextensions%3A%5B%22AMSmath.js%22%2C%22AMSsymbols.js%22%5D%7D%2Ctex2jax%3A%7BskipTags%3A%5B%22script%22%2C%22noscript%22%2C%22style%22%2C%22textarea%22%5D%7D%7D)%3BMathJax.Hub.Startup.onload()%3BsetInterval(function()%7BMathJax.Hub.Queue(%5B%22Typeset%22%2CMathJax.Hub%5D)%3B%7D%2C5000)%3B'%3Bif(window.opera)%7Bscript.innerHTML%3Dconfig%3B%7Delse%7Bscript.text%3Dconfig%3B%7Ddocument.getElementsByTagName(%22head%22)%5B0%5D.appendChild(script)%3Bscript%3Ddocument.createElement(%22script%22)%3Bscript.type%3D%22text%2Fjavascript%22%3Bscript.src%3D%22http%3A%2F%2Fuserscripts.org%2Fscripts%2Fsource%2F92758.user.js%22%3Bdocument.getElementsByTagName(%22head%22)%5B0%5D.appendChild(script)%3B%7D)()%3B
在原始文档里还有for iOS的安装等,这里就不赘述了,大家自己看吧。
使用方法嘛,把你生成的、混杂了Latex代码的.md
通过Markdown Preview(我在用的ST插件)扔到Safari解析,点击一下新建的这个书签,代码变成公式了吧。
下面是样板效果。
.Rmd
原始代码:
## Test
```{r }
n = 1
n
```
$$
\begin{aligned}
\dot{x} & = \sigma(y-x)
\end{aligned}
$$
编译后的.md
:
## Test
```r
n = 1
n
```
```
## [1] 1
```
$$
\begin{aligned}
\dot{x} & = \sigma(y-x)
\end{aligned}
$$
MiluoZ
2015年2月6日 @ 14:15
很棒~从您这里获得了很大的帮助
dahuang0210
2016年11月14日 @ 15:57
Hi~謝謝博主的經驗分享~我有一個問題不知道博主是否可以解答?在Yosemite之後,R在安裝package的時候總會出現無法讀取R_X11.so的錯誤,雖然不影響實際的安裝和應用,但是強迫症看起來真的很鬧心。我有查到這個問題的發生是因為Yosemite似乎是從系統組件中刪除了X11系列組件,所以需要單獨安裝XQuartz支持庫。但是即便安裝之後,明明在系統請求的路徑上已經有了X11文件,但是還是讀不到這個組件。我就停留在這裡了,不知道博主是否有遇到過這個問題。謝謝!
ern
2016年11月14日 @ 16:01
我没有遇到这个错误,可能因为我在安装R前已经安装了X11.您试下先安装X11以后,再安装R呢?另外,要拿最新版的X11安装包。
dahuang0210
2016年11月14日 @ 16:14
謝謝這麼快的回覆!我確實是裝的最新的2.7.11,也是按照這個順序安裝的,但是依然報錯。而且這個問題還不是我一台機器上是這樣,同學的機器也全部如此。所以一直很困惑~
ern
2016年11月14日 @ 16:17
恰好在电脑边收到信息而已,呵呵。
R也是最新版么?
另外帮你搜索了一下,看看这个链接能否帮到你:http://stackoverflow.com/questions/26489928/cant-load-x11-in-r-after-os-x-yosemite-upgrade
dahuang0210
2016年11月14日 @ 16:23
是的,R也是~這個答覆我也有參考過,他解決的應該就是確認在指定路徑是否確實存在R_X11.so這個文件,然後依然如故。也是沒輒了~非常感謝您~