从Matlab到R

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2014/05/02/matlab-to-r/

本文无意讨论R和Matlab哪个好用,只是自己换语言时候的一点体会。

在很长时间里都使用的Matlab,两年前尝试过换到Python,但由于种种原因没有成功。

原来的Matlab是搞活动的时候买的正版,包含的包已不多,但是平时的使用也足够了。这几天整理了一下电脑,准备升级Matlab,然后发现问题来了。
一是找不到当时购买的许可,二是不清楚当时买的许可能不能用在更新版本上。加之最近在学习Coursera上的The Data Scientist’s Toolbox课程,想想干脆换到R算了。

整个过程蛮顺利的,本文是一个小记。

下载和安装

Matlab是一体化的,安装以后自带IDE。R的话除了安装R以外再安装Rstudio作为IDE使用,总大小80M左右。

因为R和Rstudio都是开源的,所以许可什么的问题就不存在。

安装好以后直接启动就可以了。

常用语法的转化

R是不兼容Matlab的语法的,所以需要了解一下二者的对应关系。

最主要的参考是R for MATLAB users,它对比了常用语句。

简单的语句还好,普通的帮助也能够正常使用,比如help(plot)

Matlab中常用两句话clearclc,前者情况当前工作区的变量,后者清屏。这两个语句都不能在R中使用。

R提供了rm方法来删除当前工作区变量

rm (..., list = character(), pos = -1,
envir = as.environment(pos), inherits =FALSE)

如果要达到clear all的效果,需要指定list参数,比如

rm(list=ls());

clc我没有找到合适的替代品,根据stackoverflow上的一个讨论,以下语句是可以工作的

cat("14");

还有一个注意事项是Matlab中的a:by:b语法,比如1:0.5:5可以产生1,1.5,2,…,4.5,5的序列。同样的语句在R中可以执行,但是运行效果不一样,R产生的是1,2,3,4,5的序列。正确的语句应该是

seq(1,5,by=0.5)

图像绘制的一些细节是作为参数放入函数的,比如Matlab中的

plot(x,y);
xlabel('x');
ylabel('y');

在R中可以写作

plot(x,y,xlab="x",ylab="y");

<h1 id="关于=和关于=和<-的问题

最大的困惑源于这两个符号,对于普通的语句,二者的效果似乎是一样的,不过二者的区别在调用函数时候比较明显。
比如median(x = 1:10)语句,执行完成后工作区没有变量x,而median(x <- 1:10)语句执行后工作区会保持名为x的变量。

还有一个区别就是=只能用在顶级层次中,而if(x=0)就不行。

Google的推荐是在赋值时使用<-而不是=。

感悟

个人感觉转化其实是相关简单的,如果不考虑到Matlab的包的话其实完全可以用R来代替。

参考

Function to Clear the Console in R
Assignment operators in R: ‘=’ and ‘<-‘
Assignments with the = Operator
Google R style

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2014/05/02/matlab-to-r/

发表评论