最近在Coursera上学一门数据分析的课程,因此得用用R。照例,总结一下Mac上的一些R配置,希望能帮到Mac的中文用户。
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的话,应该还能进一步提升。
Knitr 是目前我知道的、中国人对R世界的最大贡献,一般来说是在RStudio上安装这个包后,支持在编辑器里用markdown、latex语法,同时嵌入R代码,编译后代码块会送到R来执行,最终形成一份HTML的报告(当然在Mac上就非常方便转为PDF)。包括Cousera上Duke University的这门数据分析与统计推断课程,Project都是用RMarkdown写并最终提交PDF。
RStudio本身是不错的编辑器,不过也好几百兆,对我这种毕竟很少用R的人来说,似乎没太大必要。因此第一时间放出google,发现国外也有网友将Knitr嵌入到Sublime Text 2/3里。也许是用户少,目前还不算很成熟,但基本可用,下面就是安装和一些配置步骤。
install.packages('knitr', dependencies = TRUE)
当然,你也可以选择手工安装,不赘述了。Package Control
搜索并安装。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数据、源码文件等引用方便。
写文档的时候肯定会需要插入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}
$$
© ern for Read ERN, 2014. |
Permalink |
One comment |
Add to
del.icio.us
Post tags: BLAS, knitr, MAC OS X, MathJax, R, Sublime Text
Feed enhanced by Better Feed from Ozh