Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4584379
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: LINUX

2012-05-09 02:01:36

文章来源:

这段时间为了后面比赛和毕设的各种统计分析的需要,决定系统学习一下R语言。毕竟Linux版本的 SPSS和SAS都是商业软件,穷学生也是消费不起的。更何况从学习知识的角度来说,R语言的学习还可以顺带复习巩固下概率论的基础,而SPSS这样的软 件可能就是随便点几下出结果了。想来去年的数模全国赛就已经意识到这个问题(聚类分析的时候中间很多过程的物理意义没搞明白),虽然后来答辩的时候得以侥 幸逃过。

大概决定用一个星期的时间学完,可能要写5到6篇文章来做完整个学习笔记。

R语言简介

早在二十年前,专业统计界已经广泛使用另一种专业统计软件S-PLUS。但是S-PLUS是一种收费的软件平台,其计算机语言称为S,由于这种软件 非常昂贵,因此也就未能普及于教育界。直到90年代末期,跟S语言极其相似的R语言面世,而最重要的是R的软件平台是免费的,这也大大地增加了它的普及 性。虽然R为免费软件,但它拥有很多其他收费软件没有的有点

  1. 可以同时处理不同类型的数据。比如数字和字符串一并处理,应用层面广。
  2. 独立软件。使用者可以自行编写所需的程序,不想一般软件,规范严谨,缺乏弹性。
  3. 大部分常用的统计工具都已经被写成了R程序,使用者可以按照自己的需要进行添加或删减。再者,很多网站也都提供一些常用的程序,只要下载就可以免费使用了。

上面就是一些R语言不同于其他统计分析软件的地方。当然了,R的优点不仅仅如此,更多的背景知识请自行Google吧。

R语言入门 下载及安装R

R应该早已进入各大Linux发行版的官方源,示例下Ubuntu好了,Archlinux用户pacman自行安装。

apt-get install r-base-core
apt-get install rkward

安装完毕之后,即可在菜单中找到rkward,进入后选择新建空脚本,方便直接实验计算。当然,直接在终端中用命令计算也是可以的,只是如果记录太久,终端内容也会积累太多难以查找历史命令了。

基本运算命令

基本的常用运算么有太多好说的,跟MATLAB类似,以下简单示例几个:

> 2+3
[1] 5
> sqrt(9)
[1] 3
> abs(-4)
[1] 4
> sqrt(9
+ )
[1] 3

如你所见,sqrt和abs的语法几乎与MATLAB如出一辙。如果一句未完,下句默认以+开头表示继续。这里sqrt和abs可以理解成命令,当 然其实也是R内置的函数。在R里面,函数的格式可以分为“有自变量”和“无自变量”两种。“无自变量”直接输入函数名即可,如:funcname()即 可。相反则需要:funcname(arg1,arg2)。如果去掉括号会显示该函数的定义。运算结果中的[1]代表着所得答案的第一个元素,这样在显示 向量的时候比较方便,后面会很常见。

变量和赋值
> x=sqrt(9)
> x
[1] 3
> y="hello world"
> y
[1] "hello world"

如你所见,R中我们可以使用"="或者“<-”来将数值赋给一个变量。我自己已经习惯于“=”来赋值。需要注意的一点是:R的变量名中是不允许有空格和“-”的,不过下划线还是可以的。

向量

上面所用的例子都是标量,但是在统计学中,几乎所有的数据都是以组的形式来表现。在R中,我们需要以向量的形势来输入一组数字。举例来说,我们可以利用向量的形式吧下面这组数据存储在一个变量中:

> vector=c(1,2,3,4,5,6,7)
> vector
[1] 1 2 3 4 5 6 7
> vector+2
[1] 3 4 5 6 7 8 9
> vector*2
[1] 2 4 6 8 10 12 14

在这里,vector是一个包含了7个数值的向量,而c()则指示R在括号中的数值是以向量的形式输入。再输入vector的时候,则会显示变量的内容。如上面所演示的那样,向量的运算和标量的运算时相同的。

> mean(vector)
[1] 4
> var(vector)
[1] 4.666667

函数mean()和var()可以用来计算变量的平均值和方差,非常方便。这里也是可以使用vector[1:3]这样的形式来对向量中的元素进行选择。特别值得一提的是可以使用vector[vector>4]这样的基本逻辑形式来选择适当的子集。

R例子

以上示例中的数据全部都是手动输入的,当然R是可以读取外部数据的。比如我们直接来读取内置的trees数据组来操作。trees所包含的是31棵樱桃树的数据,

> data(trees)
> summary(trees)
Girth Height Volume
Min. : 8.30 Min. :63 Min. :10.20
1st Qu.:11.05 1st Qu.:72 1st Qu.:19.40
Median :12.90 Median :76 Median :24.20
Mean :13.25 Mean :76 Mean :30.17
3rd Qu.:15.25 3rd Qu.:80 3rd Qu.:37.30
Max. :20.60 Max. :87 Max. :77.00

有时候简单的几幅图片相对于数据来说,更能清楚表达出数据的特质。例如想画出树木体积的直方图:

> vol=trees[["Girth"]]^2*trees[["Height"]]/(4*pi)
> hist(vol,col=1)

hist是画直方图的命令,后面还会有很多画图的命令。关于hist,可以help(hist)一下来查询详细用法。若想以图像的方式来表达树木体积和可用木材的关系,可以:

> plot(trees[["Volume"]],vol,col="blue")

这样体积值就会显示在图像中的x轴,而vol则会显示于图像的y轴。图像中也显示它们有明显的对应关系。不过有一点,如果只输入一个向量,函数plot会把向量数值显示在y轴,而数值的次序则会显示在x轴。可以利用这个方法来作残差分析,观察余量的标差是否一致。


阅读(2332) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~