本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文无意讨论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中常用两句话clear
和clc
,前者情况当前工作区的变量,后者清屏。这两个语句都不能在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
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯