关闭

闲人博上介绍R语言的一篇好文章

标签: r语言数据
200人阅读 评论(0) 收藏 举报
分类:

原文地址:http://javajiao.iteye.com/blog/150674

1 R的下载、安转 

R有很多的版本,支持目前主流的操作系统MAC、Linux和WINDOWS系列。因为我个人是在WINDOWS下用R的,所以在这里将只介绍WINDOWS下R的下载&安装。 

下载R: 

你可以从世界各地很多网站上下载到R,官方的中国下载点是: 
http://www.lmbe.seu.edu.cn/CRAN/bin/windows/base/ 

在我写这篇文章的时候,最新的版本是R-2.2.1版。 
在网络上有一篇被翻译过来的R入门教材,可以在这里找到 :R 導論(入門) 

安装R: 

1,双击R-2.2.1-win32.exe文件,进入安装画面。 
2,在Welcome to the R for Windows Setup Wizard的画面中,单击NEXT。 
3,在License Agreement的画面中,选择[I accept the agreement],然后单击NEXT。 
4,在Select Destination Location的画面中,可以自行设定安装目录,默认为:[C:\Program Files\R\R-2.2.1],单击NEXT。 
5,在接下来的过程中一律选则NEXT安装即可。 





2 简单的数学计算、数学函数以及如何编辑R程序 

1,用R进行简单的计算: 

我们可以用R进行以下各类运算。 

加法      + 
减法      - 
乘法      * 
除法      / 
幂运算   ^ 
整数商   %/% 
余数      %% 
例如: 
输入:   (1 + 2 - 3 * 4) / 5^6 
结果:   [1] -0.000576 

2,R中还有很多的数学函数可以使用,比如说开方函数、对数函数等等。 

例如: 
输入:   sqrt(2) 
结果:[1] 1.414213 

你还可以使用多个函数进行计算。例如: 
输入:   sqrt(100) + round(100) / log10(100) 
结果:[1] 60 下面介绍的是R中可以使用的数学函数。 

sqrt : 开平方函数 
abs  : 绝对值函数 
exp  : 2.71828… 
expm1  : 当x的绝对值比1小很多的时候,它将能更加正确的计算exp(x)-1 
log  : 对数函数 
log10  : 对数(底为10)函数 
log2  : 对数(底为2)函数 
sin  : 正弦函数 
cos  : 余弦函数 
tan  :  正切函数 
asin  :  反正弦函数 
acos  :  反余弦函数 
atan  :  反正切函数 
sinh  :  超越正弦函数 
cosh  :  超越余弦函数 
tanh  :  超越正切函数 
asinh  :  反超越正弦函数 
acosh  :  反超越余弦函数 
atanh  :  反超越正切函数 
logb  :  和log函数一样 
log1px  :  当x的绝对值比1小很多的时候,它将能更加正确的计算log(1+x) 
gamma  :  Γ函数(伽玛函数) 
lgamma  :  等同于log(gamma(x)) 
ceiling  :  返回大于或等于所给数字表达式的最小整数 
floor  :  返回小于或等于所 给数字表达式的最大整数 
trunc  :  截取整数部分 
round  :  四舍五入 
signif(x,a)  :  数据截取函数 x:有效位 a:到a位为止 
3,R程序的输入/编辑 

你可以直接在R的环境里输入R命令执行计算,也可以用任何一款文本编辑器进行编程。R程序的默认文件名后缀是[ .R ]。 
4,环境设置函数options() 

用options()命令可以设置一些环境变量。 

比如说: 

options(digits=10) 
这个命令,可以把R的整数表示能力设为10位。 

options(warn=-1) 
这个命令,可以忽视任何警告。(warn=1时,为不放过任何警告) 
…… 

使用help(options)可以查看详细的参数信息。 


RWEKA: 

WEKA是一个JAVA写的数据挖掘的工具,RWEKA则是在R中调用WEKA的一个界面。 

扩展包说明&下载地址(英文):http://cran.r-project.org/src/contrib/Descriptions/RWeka.html 


3、R的数据类型 

R中包含以下的基本数据类型。 

空值(NULL) 
意义  :该对象里什么都没有(甚至连0也没有) 

欠损值、不定值(NA),非数(NaN),无限大(Inf) 
意义  :NA:表示数据缺损;NaN:表示用数字无法表示;Inf:无限大 

复数(complex) 
意义  :复数 

字符串(character) 
意义  :不是单一的字符,而是用双/单引号括起来的字符 

逻辑值(logical) 
意义  :T表示真,F表示假 


4_关于R的一些基本知识 


首先看一下这一次要讲的内容。 

在用R进行数据分析和计算的时候,将会用到很多变量、函数、数组等等。而对象则是对所有这些变量、函数、数组等的总称。比如说,下面这个式子:x <- 2通常我们会说,x是一个变量,我们通过赋值运算把它的值设为2。但是在R里,不论我们是给一个变量赋值也好,还是对一个数组进行初始化也好,我们统统把它称为[对象]。  

什么是对象(Object) 
如何改变工作目录 
关于扩展包(库函数) 
R的数据类型 
环境设置函数options() 
接下来,我们一个一个的简单介绍。 

1,什么是对象(Object) 

在用R进行数据分析和计算的时候,将会用到很多变量、函数、数组等等。而对象则是对所有这些变量、函数、数组等的总称。 
比如说,下面这个式子: 
x <- 2 



下面的对象是R的预设对象。我们在命名自己的对象时,是不能与下面这些对象重名的。 

break 
else 
for 
function 
if 
TRUE 
in 
next 
repeat 
return 
while 
FALSE 

另外: 
使用objects()函数,还可以查看目前存在的对象名。 
使用rm()函数,可以消除自己所定义过的对象。( 例如: rm(killme) ) 
使用rm(list=ls(all=TRUE))命令,可以消除自己所定义过的所有的对象。 
命名对象时,要注意大小写。(例如:x和X是两个不同的对象) 

2、如何改变工作目录 

你可以用getwd()命令来查看当前目录,也可以用类似setwd(”c:/usr”)的命令来更改当前的目录。 

你还可以用dir()命令来查看当前目录里的文件。(好像回到了dos时代…呵呵) 

3、关于扩展包(库函数) 

R有很好的扩展性能,默认下R自带了以下的扩展包。 

base:R的基本扩展包 
boot:R的启动函数库 
class:Classification的函数库 
cluster:进行聚类分析计算的函数库 
foreign:读取其它的统计软件(如:SAS…)等生成的文件的函数库 
grid:grid图像函数库 
KernSmooth:进行核函数密度估计运算的函数库 
lattice:lattice图像函数库 
MASS:在『Modern Applied Statistics with S』中出现的数据与函数库 
methods:定义了在R中用于对象的各种方法、类、程序以及工具。 
mgcv:GCV和一般加法模型GAM(generalized additive model)的函数库 
nlme:线性混合效果模型和非线性混合效果模型的函数库 
nnet: 
rpart:使用了再归算法的分类和回归树的函数库 
spatial: 
splines:splines回归的函数库 
stats:R的统计函数库 
stats4:S4类的统计函数库 
survival: 
tcltk:Tcl/Tk的接口函数库 
tools:用于扩展包开发和管理的函数库 
utils: 

另外: 
使用library(help=”扩展包名”)命令可以查看该扩展包的详细信息 
使用library(扩展包名)命令可以使用该扩展包 
使用search()命令可以查看现在已经读取的扩展包 
使用detach(”package:扩展包名”)命令可以卸载某个扩展包 
使用data()命令可以查看当前可使用的数据对象 
使用data(package = “扩展包名”)命令可以查看在该扩展包中的数据对象 

扩展包的安装: 
使用下面的命令,可以联网安装扩展包。 
options(CRAN=”http://cran.r-project.org”) 
install.packages(”扩展包名”) 

如果你已经下载了扩展包的ZIP压缩文件,你可以用下面的命令指定路径安装扩展包。 
install.packages(”路径名/文件名.zip”, contriburl = NULL) 
例如:install.packages(”c:/adapt_1.0-4.zip”, contriburl = NULL) 

当然,你也可以通过菜单操作下载和安装扩展包,请自己研究。 


5_用R进行基本的统计计算 


今天简单的讲一下如何用R进行基本的统计计算。 

定义: 
数据有很多种分类方法,在这里,为了方便理解,暂时把年龄、身高、体重等用数字表示的数据叫做数量型数据;相对的,把血型、性别、职称等用文字叙述的数据叫做质量型数据。 

在这里所说的基本的统计计算,是指对各类数量型数据进行求和、平均、求最大值最小值等等的计算。 

●和与百分比 

A:和 

在对数量型数据进行分析计算时,求和是经常会使用到的。 

比如说,有五位同学,他们的身高分别是: 
1.75米 、 1.82米 、 1.78米 、 1.93米 、 1.77米 
求他们的身高的总和。 

和 = 1.75+1.82+1.78+1.93+1.77 = 9.05米 

用R进行求和计算时,你可以按照下面的方式进行计算 

> 1.75+1.82+1.78+1.93+1.77 
[1] 9.05 

也可以利用R本身的sum()函数,这样的话,会更加便捷。 

> shengao <- c(1.75,1.82,1.78,1.93,1.77) 
> sum(shengao) 
[1] 9.05 

B:百分比 

还是刚才那5位同学,他们的体重分别是: 
69公斤 , 80公斤 , 78公斤 , 96公斤 , 65公斤 
他们的总体重为: 

  1. > tizhong <- c(69,80,78,96,65)  
  2. > sum(tizhong)  
  3. [1388  


388公斤。 

那么,第一位同学占总体重的多少呢? 

按比例计算: 

  1. > tizhong/sum(tizhong)  
  2. [10.1778351 0.2061856 0.2010309 0.2474227 0.1675258  



按百分比计算: 

  1. 100*(tizhong/sum(tizhong))  
  2. [117.78351 20.61856 20.10309 24.74227 16.75258  


使用扩展包sca中的percent函数,可以用带%符号的表示方式显示结果。 

  1. > library(sca)  
  2. > percent(tizhong/sum(tizhong))  
  3. [1] “18 %” “21 %” “20 %” “25 %” “17 %”  


还可以用参数d来指定小数点后的表示位数。在不指定的情况下,小数点后的数字不表示。 

  1. > percent(tizhong/sum(tizhong),d=1)  
  2. [1] “17.8 %” “20.6 %” “20.1 %” “24.7 %” “16.8 %”  



如果不想结果被双引号包围,可以用noquote命令 

  1. > noquote(percent(tizhong/sum(tizhong),d=1))  
  2. [117.8 % 20.6 % 20.1 % 24.7 % 16.8 %  



●表示中心的统计量 
表示数据中心位置的统计量有很多种,最基本的有:平均值、最频值。 

A:平均值 

上面那五位同学的年龄分别为: 
19岁 、 21岁 、 20岁 、 26岁 、 17岁 
在求这五位同学的年龄的平均值时,可以用下面这种方法: 

  1. > (19+21+20+26+17)/5  
  2. [120.6  


也可以用R自带的mean()函数: 

  1. > nianling <- c(19,21,20,26,17)  
  2. > mean(nianling)  
  3. [120.6  


B:最频值 

在数据中最频繁出现的数值叫做最频值。 

我们先用其他的函数来间接的求最频值。 
例如:我们在求下面这组数据的最频值时,可以使用table函数。 

  1. 1 , 7 , 3 , 7 , 8 , 23 , 5 , 7 , 9 , 3 , 4  
  2. > table(c(1 , 7 , 3 , 7 , 8 , 23 , 5 , 7 , 9 , 3 , 4))  
  3.  1  3  4  5  7  8  9 23  
  4.  1  2  1  1  3  1  1  1  


从返回的结果中我们可以清楚地看到,在数据中 “7” 出现了3次,因此 “7” 为该组数据的最频值。 

接着,我们直接用函数median()来求最频值。 

  1. > median(c(1 , 7 , 3 , 7 , 8 , 23 , 5 , 7 , 9 , 3 , 4))  
  2. [17  


●表示分散的统计量 
表示数据中心的统计量虽然很重要,但是表示数据四周的分散信息的统计量也十分的重要。 

A:最大值、最小值和范围 

我们用tizhong数据,分别计算五位同学体重的最大值、最小值和体重的分布范围。 

最大值 

    1. > max(tizhong)  
    2. [/196  
    3. <pre name="code" class="java">最小值  
    4. <pre name="code" class="java">> min(tizhong)  
    5. [165  
    6. </pre>  
    7. <br>范围  
    8. <br><pre name="code" class="java">> range(tizhong)  
    9. [165 96  
    10. </pre>  
    11. <br>  
    12. <br>B:方差和标准偏差(variance AND standard deviation)  
    13. <br>  
    14. <br>在R中,有很方便的求方差和标准偏差的函数var()和sd()。  
    15. <br>  
    16. <br>例如在求tizhong数据的方差和标准偏差时,可以如下计算。  
    17. <br>方差:  
    18. <br><pre name="code" class="java">> var(tizhong)  
    19. [1144.3  
    20. </pre>  
    21. <br>标准偏差:  
    22. <br><pre name="code" class="java">> sd(tizhong)  
    23. [112.01249  
    24. </pre>  
    25. <br>C:四分位数  
    26. <br>  
    27. <br>四分位数是指把样本数据按从小到大的顺序等分成四份,各等分点上的数即为四分位数。  
    28. <br>例如:数据  
    29. <br>  
    30. <br>30%点)  5  625%点)  8  950%点)  11  1275%点)  15  16100%点)  
    31. <br>  
    32. <br>25%点的675点的12分别称为下四分位数和上四分位数。  
    33. <br>  
    34. <br>上四分位数与下四分数之差叫做四分位间距。  
    35. <br>  
    36. <br>在R中我们可以用quantile()函数和IQR()函数来求四分位数和四分位间距。  
    37. <br><pre name="code" class="java">> sifenshu <- c(3,5,6,8,9,11,12,15,16)  
    38. > quantile(sifenshu)  
    39.   0%  25%  50%  75100%  
    40.    3    6    9   12   16  
    41. > IQR(sifenshu)  
    42. [16  
    43.   
    44. </pre>  
    45. <br>  
    46. <br>今天简单介绍了一下如何用R对一些基本的统计量进行计算,如果有其它的要求的,欢迎提出来,我会进一步介绍的。今天就先到这里了,呵呵。   
    47. <br>  
    48. <br>  
    49. <br>6_R的函数  
    50. <br>  
    51. <br>R中有很多的标准自带的函数,也有很多的由扩展包支持的函数。今天我们主要看一看R中标准自带的函数。  
    52. <br>  
    53. <br>首先简单定义一下什么是函数:  
    54. <br>  
    55. <br>在R中,所谓函数实际上就是一系列程序的组合。  
    56. <br>  
    57. <br>为了能够更深刻的理解这句话,我将在下面这个例子中先一步一步的计算几个数的平均值;再讲如何把这些可以重复利用的运算步骤改写成为自己服务的函数;最后,我们再看一下R中已经为我们准备好了的求平均值的函数的用法:  
    58. <br>  
    59. <br><pre name="code" class="java">1,一段程序  
    60. 我们用R计算下面这5个数的和  
    61. 23  34  56  78  89  
    62. 在R中,我们刚开始可能会这样写:  
    63.   
    64. >x <- c( 2334567889 )  
    65. >z <- 0  
    66. >for( i in 1:5 ){  
    67. >z <- z + x[i]  
    68. >}  
    69. >z <- z/5  
    70. >z  
    71. [1]56  
    72. </pre>  
    73. <br>经过我们一步一步的计算,得到了最后的结果56。  
    74. <br>  
    75. <br>但如果每次遇到类似这样的求平均的运算,我们都这样的用手去一步一步的输入的话,好像很麻烦,呵呵,还好,R可以帮助我们这些懒人,用函数的方式来解决这个问题。  
    76. <br>  
    77. <br>2,一段程序变函数  
    78. <br>我们所想要的是,只要输入数据就可以自动的帮我们算出平均值的结果。下面我们来看看怎样在R中写一个自己的函数。  
    79. <br>  
    80. <br><pre name="code" class="java">> mymean <- function(x){  
    81. + y <- 0  
    82. for(i in 1:length(x)){  
    83. + y <- y+ x[i]  
    84. + }  
    85. + y <- y/length(x)  
    86. + }  
    87.   
    88. </pre>  
    89. <br>现在,属于我们自己的求平均函数mymean()就完成了,我们可以用下面这段程序来检查一下看有没有什么错误。  
    90. <br>  
    91. <br><pre name="code" class="java">>x <- c( 2334567889 )  
    92. >y <- mymean(x)  
    93. >y  
    94. [1]56  
    95.   
    96. </pre>  
    97. <br>呵呵,结果一致。 我们以后就可以用这个自己制作的函数来计算其他的各种求平均运算了。  
    98. <br>  
    99. <br>3,利用R自带的函数  
    100. <br>其实像求平均、求和、最大值、最小值甚至自然指数、平方根等运算在R中都已经有自带的函数。比如R中自带的求平均函数:mean()  
    101. <br><pre name="code" class="java">  
    102. >x <- c( 2334567889 )  
    103. >y <- mean(x)  
    104. >y  
    105. [1]56  
    106. </pre>  
    107. <br>  
    108. <br>使用方法和我们自己写的函数的使用方法是一样的。  
    109. <br>  
    110. <br>好,我们到现在为止就大概的看了看函数的定义,如何制作自己的函数以及如何使用R中自带的函数。  
    111. <br>  
    112. <br>接下来,我就把R中自带的函数列一个简表,以方便大家查询。(这里并不是全部,只是个人认为比较常用的,希望对初学者有所帮助。……也许以后会慢慢更新、补全,呵呵……)  
    113. <br>  
    114. <br>基本统计量:  
    115. <br>  
    116. <br>mean  
    117. <br>求平均值  
    118. <br>   
    119. <br>max  
    120. <br> 求最大值  
    121. <br>   
    122. <br>min  
    123. <br> 求最小值  
    124. <br>   
    125. <br>range  
    126. <br> 求范围(最大值-最小值)  
    127. <br>   
    128. <br>median  
    129. <br> 求中央值  
    130. <br>   
    131. <br>var  
    132. <br> 求分散  
    133. <br>   
    134. <br>  
    135. <br>数据操作:  
    136. <br>  
    137. <br>matrix  
    138. <br> 建立行列式  
    139. <br>   
    140. <br>list  
    141. <br> 建立列表  
    142. <br>   
    143. <br>is.*****  
    144. <br>  
    145. <br>****是数据的类型名  
    146. <br>例如:  
    147. <br> is.matrix(x)语句的意思是问R:“x是不是行列式?”。  
    148. <br> 如果x是行列式的话R将返回”TRUE”,如果不是R将返回”FALSE”  
    149. <br>   
    150. <br>as.****  
    151. <br>****是数据的类型名  
    152. <br> as.matrix(x)的作用是不管x以前是什么类型的,R都要用这条语句来把x转换成行列式。  
    153. <br>  
    154. <br>nrow  
    155. <br> 返回对象的行数:nrow(x)  
    156. <br>   
    157. <br>ncol  
    158. <br> 返回对象的列数:ncol(x)  
    159. <br>   
    160. <br>length  
    161. <br> 返回对象的长度  
    162. <br>   
    163. <br>colnames  
    164. <br> 返回列名  
    165. <br>   
    166. <br>rownames  
    167. <br> 返回行名  
    168. <br>   
    169. <br>   
    170. <br>简单计算:  
    171. <br>  
    172. <br>abs  
    173. <br> 计算绝对值  
    174. <br> abs(-2)  
    175. <br>   
    176. <br>exp  
    177. <br> 求自然指数  
    178. <br> exp(1)=2.7182…  
    179. <br>   
    180. <br>sqrt  
    181. <br> 求平方根  
    182. <br> sort(4)  
    183. <br>   
    184. <br>log  
    185. <br> 求自然对数  
    186. <br> log(exp(1))=1  
    187. <br>   
    188. <br>log10  
    189. <br> 常用对数  
    190. <br> log10(10)=1  
    191. <br>   
    192. <br>cos,sin,tan  
    193. <br> 三角函数  
    194. <br>   
    195. <br>acos,asin,atan  
    196. <br> 逆三角函数  
    197. <br>   
    198. <br>round  
    199. <br> 四舍五入  
    200. <br> round(3.1415 , 3)= 3.142  
    201. <br>   
    202. <br>  
    203. <br>  
    204. <br>  
    205. <br>  
    206. <br>关于R的一些网站:  
    207. <br>  
    208. <br>中文:.  
    209. <br>中国统计论坛 - R语言与SPLUS: http://www.8sta.com/bbs/Archive_index.asp?BoardID=38&BoardType=R语言与SPLUS  
    210. <br>  
    211. <br>英文:  
    212. <br>R Project(R的官方网站):http://www.r-project.org/  
    213. <br>  
    214. <br>日文:  
    215. <br>日本的R大本营:http://www.okada.jp.org/RWiki/  
    216. <br>R-TIPS(日文教程):http://cse.naro.affrc.go.jp/takezawa/r-tips/r2.html  
    217. <br>用R进行统计处理:http://aoki2.si.gunma-u.ac.jp/R/  
    218. <br>  
    219. <br>  
    220.   </pre> 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:53045次
    • 积分:866
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:72篇
    • 译文:1篇
    • 评论:5条
    最新评论