首页 > 代码库 > R语言学习笔记

R语言学习笔记

Date: 2014.10.29

R学习:第一章知识点概述

  1. R语言区分大小写
  2. R语言支持的数据类型包括:向量,矩阵,数据框以及列表
  3. 一次交互会话期间的所有数据对象都被保存在内存之中(my#大量的数据计算会对内存造成很大压力?后面有讲要使用特殊的方法)my#代表自己的注释
  4. R语言中使用了 <- 作为赋值符号,这和其他的语言不同 x <- rnorm(5) 用函数得到一个五个元素的向量X
  5. c( )函数可以将括号里面的参数组合成一个向量或列表,用于接下来的函数的运算(my#就好像在python的科学计算里面也要讲python的列表封装成其引入包的特定的列表形式一样)
  6. mean()求里面列表或向量的平均数,summary()表示对里面的数字进行摘要统计
  7. sd()求里面列表或向量的标准差
  8. cor( a,b)表示a与b的相关度。
  9. plot(a,b) 得到一个a与b的散点图(此情形默认散点图),hist(x)生成直方图
  10. 运行 demo()得到图形的完整的演示列表,可以通过运行比如demo(image)之类的函数来查看一些图形示例。
  11. 输入help.start()以http形式打开本地帮助文档的front matter,可惜都是英文;help( func) to find the help with using it; help.search(func) search the func ; example(func) find the examples of func(图形示例哦,这里的示例就是在help里面最下面的例子的图形展示)
  12. 工作空间:可以用getwd()获得当前工作空间的目录,使用setwd()来修改当前的工作目录。ls()来获得当前工作空间中的对象(my#小写);rm("a","b")删除一个或多个对象。
  13. options()显示或设置当前选项,比如使用options(digits=3)表示显示具有小数点后三位有效数字的格式。但是显现的是四位小数(答案是保留3位有效数字,有效指从左边第一个不为0的数字算起)
  14. history(#)显示最近使用过的#个命令,默认为25,savehistory(“myfile”)保存命令到文件“myfile”中,默认值为.Rhistory .loadhistory(“myfile”)载入一个命令历史文件,默认为.Rhistory。save.image(“myfile”) save workspave to myfile,and default is .RData , load(“myfile”) read a workspace to R 。save(objectList,file = “myfile”) save the object to myfile.
  15. R语言不会自动的创造目录,有需要可以使用函数dir.create()创造,dir.create("niuqike")在当前的(getwd())工作空间中创造一个文件夹“牛其科”参数里面单引号也是可以的。有路径的话要使用‘/’正斜杠
  16. source(“filename.R”)这就可以在比如记事本中写R语句,然后在命令行状态下使用source命令,进行脚本的执行,记得文件名要写明类型,否则会出错,可以直接改变扩展名为R就可以了,不过扩展名不是强制的。
  17. sink(“filename”)是将输出的文本结果存储到文件中,其中有两个参数,一个是append 设置为TRUE的话,可在文本后面追加内容,默认是覆盖原文件,还有一个参数split如果设置为TRUE注意布尔值要大写,那就在屏幕和文件中都输出结果,如果是sink()没有参数的话,就只在屏幕输出。

(后面测试:在开始写入输出语言(sink or pdf),后面的结果和图像会自动存储,但是图像好像是关闭对话后显示的)

  1. install.packages(“packagesname”) 下载一个包到lib,update.packages(“name”)更新包,install.packages(),install.update()显示一个下载的列表,更新所有的包。Installed.packages()显示安装包的信息。成功下载了“vcd”包
  2. library(“packagesname”)加载包,help(“packagesname”)包的帮助信息.

 

Data 2014.10.30

R语言学习:第二章

  1. 向量:向量是用来存储数值型,字符型或者逻辑型数据的一维数组。单个向量中的数据必须要拥有相同的类型或模式,同一向量中无法混杂不同模式。(my#测试:在一个向量中放置了数字型,字符型和逻辑型数据,显示出来的全部是字符型数据)
  2. 最好不用c作为变量名,因为R中内置了同名函数c()
  3. 标量指的是只含有一个元素的向量,用于保存常量。R里面没有标量的概念
  4. 在向量的元素的获取中,仍然使用[]符号,但是与其他编程语言不同的是,它的下标是从1开始取值。也可以使用类似切片的功能,比如a[2:6] 取得第2个到第6个,注意这里是包括切片的后取值的,就是包括a向量中的第6个数字,也和其他语言不同。最后一种取法a[c(1,2,3)] a[c(1:3)] 就是将一个由c函数形成的有序序列传入[]中取值,注意直接取值a[1,2,3]是不行的。
  5. 矩阵是一个二维数组,只是每个元素都拥有相同的数据模式(数值型,逻辑型或者是字符型),可以通过matrix创建。其创建方式为 mymatrix <- matrix(vector,nrow=1,ncol=1,byrow = TRUE,dimnames = list(char_vector_rownames,char_vector_colnames)) vector represent the elements in matrix,byrow default be set FALSE,dimnames = list()表示行名和列名。你在向量中读取数据集的方式要和你在矩阵中读取的设置方式是一致的,如果在组成向量的过程中,是按照行读取的,那么设置矩阵的时候也要设置行读取,只要后面的行数和列数正确,就不会出问题。
  6. 矩阵的取值,可使用下标加[]的方式进行取值。a[num_row,]取出整行的数据,a[,num_col]取出整列的数据,注意逗号,然后这个取值也是从1开始的。a[num_row,num_col]取出具体的一个数值。也提供了多行的查询,仍然使用向量的形式,a[1:3,1:3]可以,y[c(1,3,5),1:3] 也可以,y[c(1,2,4),c(1,2,3)] 也是可以的。
  7. 矩阵只能是二维的,如果涉及到多维同种类型的数据,可以使用数组,当涉及到多种模式的时候可以尝试使用数据框。
  8. 数组是矩阵的自然推广,其创建如下 array(vector,dimensions,dimnames),里面没有byrow参数,取值方式和矩阵是一样的。
  9. 数据框采用data.frame(col1,col2)来进行创建,其中的列名为原来列向量的变量名。注意的是data[1]取得的是第一列。但是data[1,2]取得的值是第一行的第二个数值。也可以采用a[c(“colname”,”colname”)] 获取值;还有一个新的a$colname的取法。但是得到的格式是不同的。新方法得到的是一个向量,这个一定要注意。
  10. 注意:在创建数组,矩阵以及数据框中取值的时候,记得逗号的用法。如果是a[]这样的形式,其实它是取得的原来创建是使用向量的坐标。比如一个矩阵a由1:4创造2*2,其中a[4] = 4
  11. table()产生一个列联表 ,可以很方便的使用上面数据框使用$符号得到的向量来进行计算。
  12. 为了使得a$colname,这样的更为简洁,可以引入attach(“变量名”)方法,这样就不必每次写变量名,可以直接使用其列名进行计算。和其他语言中的import有相似的地方,但是要记得将其移除,使用detach(“变量名”)方法。
  13. R语言中传入参数的时候,带引号的一般是文件,或者字符串.当函数需要接收一个变量对象的时候,是不需要加双引号的。也可以使用with语句,比如with(变量名,{

计算语句

})如果里面只有一条的话,可以省略大括号。另外,其局限性在于,里面的对象只在括号里面生效,是局部变量。如果想创建全局变量需要使用特殊的赋值符号 <<-

  1. 实例标识符:data.frame(name,age,gender,row.names = name) 这个就是制定了name列为标记各类打印输出和图形输出的变量名。
  2. 名义型的变量和有序性的变量在R中称之为因子,决定了数据的分析方式以及如何进行视觉呈现。使用factor()函数
  3. 名义型的变量以及有序型的变量,因子化后是一种映射,里面因子排列的顺序是按照字母的顺序进行排列的,这个肯定不能满足需求,有序型:有了factor(变量名,order=TRUE,levels = c(“”“”“”))在引号里面填写排列的顺序。
  4. 因子化的过程其实是让名义型和有序性这种貌似无法直接比较的字段有了逻辑意义,通过内部映射为数字型的向量,实现相互之间的比较。这个和数据挖掘中的对某些非数字型数值的处理相似。Levels 赋值的过程其实就是一个数据处理的过程
  5. 因子化后可以在计算的时候提供合适的计算。
  6. List列表中一个有意思的现象:list[2]与list[[2]]的区别,前者其实返回的是list的第二个元素,后者其实返回的是原来组成列表的那个元素,其打印效果里面前者会多一个变量值。后来测试了一下,a[[1]]得到的结果和组成列表输入的结果是一致的;a[1]还是得到一个列表。
  7. 测试:> a<-c(1,2,3),对于一个向量来说返回值一样,但是他也不会遇到上面的情况。

> a

[1] 1 2 3

> a[1]

[1] 1

> class(a[1])

[1] "numeric"

> class(a)

[1] "numeric"

 

 

对矩阵的测试:如果没有出现二维的结构的话,都是以向量的形式输出的。

> b<-matrix(1:4,nrow=2,ncol=2)

> b

     [,1] [,2]

[1,]    1    3

[2,]    2    4

> b[1]

[1] 1

> class(b[1])

[1] "integer"

> class(b[4])

[1] "integer"

> b[1,2]

[1] 3

> class(b[2])

[1] "integer"

> b[1,]

[1] 1 3

> class(b[1,])

[1] "integer"

> class(b[,2])

[1] "integer"

> b[,2]

[1] 3 4

> b[[2]]

[1] 2

> class(b[1:2,2])

[1] "integer"

> b[1:2,2]

[1] 3 4

> b[1:2,1:2]

     [,1] [,2]

[1,]    1    3

[2,]    2    4

 

对数组的测试:

 

> a<-array(1:12,c(2,3,2))

> a

, , 1

 

     [,1] [,2] [,3]

[1,]    1    3    5

[2,]    2    4    6

 

, , 2

 

     [,1] [,2] [,3]

[1,]    7    9   11

[2,]    8   10   12

 

> a[1]

[1] 1

> class(a[1])

[1] "integer"

> a[[1]]

[1] 1

> a[1,]

错误于a[1, ] : 量度数目不对

> class(a[1,1,2])

[1] "integer"

> class(a[,,1])

[1] "matrix"

> a[,,1]

     [,1] [,2] [,3]

[1,]    1    3    5

[2,]    2    4    6

> class(a[,1,])

[1] "matrix"

> a[,1,]

     [,1] [,2]

[1,]    1    7

[2,]    2    8

> a[1,,]

     [,1] [,2]

[1,]    1    7

[2,]    3    9

[3,]    5   11

> a[1,,2]

[1]  7  9 11

> a[1,,1:2]

     [,1] [,2]

[1,]    1    7

[2,]    3    9

[3,]    5   11

>数组会主动降维,就是根据你的结果重新输出。

 

数据框中,mydata[1]返回数据框,$返回的是向量;然后还有就是a[1,2]是向量,先行后列

> mydata

  age gender weight var4

1  12     we     45    7

2  13     we      0    7

3  14     re     45    7

4  15     df     78    7

> class(mydata)

[1] "data.frame"

> mydata[1]

  age

1  12

2  13

3  14

4  15

> class(mydata[1])

[1] "data.frame"

> class(mydata$age)

[1] "numeric"

> mydata[1,s]

错误于`[.data.frame`(mydata, 1, s) : 找不到对象‘s‘

> mydata[1,2]

[1] we

Levels: we re df

> mydata[1,2]

[1] we

Levels: we re df

> mydata[1,4]

[1] 7

> class(mydata[1,4])

[1] "numeric"

 

  1. 用键盘输入,先创造一个空的数据结构。比如 mydata <- data.frame( age = numeric(0), gender = character(0), weight = numeric() )  myadata<- edit(mydata) 可以在编辑框里面添加资源以及修改列名等信息。
  2. 从带分隔符的文本文件中导入数据:mydata <- read.table(file,header = TRUE/FALSE,sep = “ ” ,row.names = “”)sep制定分隔符。注意使用read.table()函数,文件要有扩展名才行。
  3. 从excel导入的话,可以先导出 为csv格式,然后在按照上面的格式读入。也可以下载RODBC包进行导入。
  4. RODBC方法:library(RODBC)

Channel <- odbcConnectionExcel(“”)

Mydataframe <- sqlFetch(channel,”mysheet”)

  • odbcClose(channel) 用了数据库存储引擎,先建立和文件的一个连接,然后使用sqlFetch语句读取里面表格插页的内容,用完后还要关闭连接释放资源。
  1. 另外的,读取现在的xlsx格式有其他的包xlsx包。

Library(xlsx)

Mydata <- read.xlsx(“文件地址”, 1)。一开始出了一个找不到vim.dll的错误,这个和环境变量有关。

  1. Xml与网页抓取的内容没有详细介绍。
  2. 导入spss数据:可以使用foreign中的read.spss()导入spss的数据到R中。也可以使用Hmisc中的spss.get()函数,这个是对前者的封装可以设置很多参数。
  3. Library(hmisc) mydata <- spss.get(“file name”, use_value_lables = TRUE)
  4. 对于sas的支持:可以使用foreign包里的read.ssd(),或者是 hmisc 中的sas.get() ,不一定兼容,要测试确定。
  5. 导入stata数据和之前的大部分一样,加载foreign包,然后 read.dta(“filename.dta”)返回数据框。
  6. 导入 netCDF数据以及HDF5数据
  7. 连接数据库。
  8. 实用的函数介绍: length()显示对象中元素/成分数量
  9. Dim()显示某个对象的维数
  10. Str()显示对象的结构
  11. Class()显示对象的类型
  12. Mode()显示对象的模式
  13. Names()显示对象中各成分的名称
  14. Cbind()按列合并对象
  15. Rbind()按行合并对象
  16. Head()列出某个对象的开始部分
  17. Tail()列出某个对象的最后部分
  18. Ls()
  19. Rm(list = ls()) 删除所有的对象
  20. Fix()直接编辑对象,直接弹出一个编辑框
  21.  

 

Data:2014.10.31

R语言学习第三章:

  1. abline(lm(weight~age))最优拟合曲线,weight是纵轴。
  2. title()添加标题
  3. 输出:

pdf(“”) ---dev.off()

  1. 多个图形查看,使用dev.new( )方法,但是不要在最后使用dev.off()
  2. plot()是R里面的一个泛型函数,输出将根据所绘制对象类型的不同而变化,polt(x,y,type=’b’)在例子中,X为横轴,Y为纵轴,‘b’表示绘制点和线。(只是在本例中)
  3. 修改图形参数:通过修改称之为图形参数的选项来自定义字体、颜色、坐标轴和标题

一种方法是使用par( )函数,空的打印参数列表,加no.readonly = TRUE参数打印可修改的参数列表。注意:最好先复制一份当前的列表,以便回复到原来的状态。

lty参数表示的是线条类型,pch参数表现的是节点的形状。

  1.  

 

R语言学习笔记