R语言入门

2017-08-27  本文已影响49人  JSong1122

一个不推荐自己编程,高度优化的面向对象的静态统计语言

1、序

用知乎体来整理
先假设啥好的软件都没有,我们先来想想一个优秀的科学计算软件需要哪些东西。

  1. 编程简洁但又能进行一定的自由定制,比如写一个自己行业所需要的工具箱之类的
  2. 速度快,能适应越来越大的数据流
  3. 具有可视化功能,可以绘制丰富的图表

那应该怎么设计软件?

  1. 设计各种高级的数据类
    1). 支持字符串和数组的向量类型,在MATLAB中两者是分开来的
  2. 数据类的基本操作或者函数,初始化,索引,切片,逻辑索引,逻辑判断,赋值,
  3. 简单的数据生成,如数列,特殊矩阵等
  4. 控制流
  5. 绘图
  6. 丰富的函数库,线性代数,概率,图像处理,IO,时间序列,机器学习常用算法
  7. 外部接口,混合编程

2、数据结构

最底层的数据结构为:字符,数字,整数,逻辑,复数

第一层:向量,列表,因子
第二层(class):矩阵,数据框等

- 向量:同种数据格式,numeric, logical, char)
        demo :x<- c(1,2,3,4)
                      x<-c('M','N')
- 矩阵:带size的向量
                 demo:  dim(x)<-c(2,3) 

                 matrix(c(1:10),nrow=2,ncol=5)
- 列表:类似于元胞数组,对象的集合
                   demo:  list(c(1:10),"M")
- 数据框: 行必须相同的list,统计常用的一种格式,类似于SPSS,数据库中的表
                     demo:   data.frame(a,b,c)
- 因子 : factor

软件是面向对象编程的,每一个这样的向量就是一个对象,一些固有属性如下

length  对象的长度,多指容器
names   名称
class   类
str 结构
dim 维数,一维是没有维数的
head    
tail    

3、序列的生成:

a<-1:10
a<-10:1
a<-seq(3,10,2)
a<-seq(3,10,length.out=11)# 等价于linspace
a<-rep("hi",2)
a<-rnorm(100,0,1)
a<-rbind(1:10,2:4)
a<-cbind(1:10,2:4)

4、字符串操作

nchar   字符串长度   nchar(c('sdf','sdf'))
paste,paste0    字符串拼接   
strsplit    字符串分割   
substr  字符串截取   
sub,gsub    字符串替代   
grep,grepr  从序列中搜索特定字符串,返回索引值,后者返回逻辑值   
sprintf     
regexpr,gregexpr    正则表达式   
toupper,tolower 大小写 

5、系统内存操作

getwd,setwd,ls,rm,list.files

6、数据导入

w 导入分隔符文件
语法:  mydataframe <- read.table(file, header=logical_value,sep="delimiter", row.names="name")
参数说明:
     file 文件路径(包含文件名)
     header 是否具有表头
     sep 分隔符
     row.names

例子:
setwd("d:\\data")
grades <- read.table("studentgrades.csv", header=TRUE, sep=",")
w 导入files目录下文本
files=paste("files/",dir("files"),sep="")
fs=c()
for(i in 1:length(files))
    fs[i] <- paste(readLines(files[i]),collapse="\n")          #按行读取文本文件,每一行用“\n”隔开
rcorp <- Corpus(VectorSource(fs))   #把字符串生成corpus格式,VectorSource把字符串变成输入的文档格式,几个字符串就表示有几个文档
w 导入词典
install.packages('rJava')                                       #安装rJava
install.packages("Rwordseg",repos="http://jliblog.com/crap")   #安装Rwordseg
require(Rwordseg)                                               #加载
system.time(for(i in 1:10000) segmentCN("setence"))
installDict("E:/Download/userLibrary.dic")                      #导入词典(userLibrary.dic)
options(dic.dir = "D:/day_file/R")                              #用户自定义字典
loadUserDict()
insertWords("sentence")                                         #添加
removeWords("sentence")                                         #删除
w 导入Excel数据
library(xlsx)
workbook <- "d:/data/tot.xlsx"
mydataframe <- read.xlsx(workbook, 1 ,encoding='UTF-8')

library(RODBC)  
channel=odbcConnectExcel("d:/test.xls")  
mydata=sqlFetch(channel,'Sheet1') # 如果是Excel2007格式数据则要换一个函数odbcConnectExcel2007 

注:rJava安装之前需要配置Java环境变量
JDK下载:http://pan.baidu.com/s/1eQrKIaA
配置JAVA的环境变量: http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html

保存和加载R的数据
保存和加载R的数据(与R.data的交互:save()函数和load()函数)

a <- 1:10  
save(a, file = "data/dumData.Rdata") # data文件为当前工作目录下的文件,必须存在  
rm(a)  
load("data/dumData.Rdata")  
print(a)  
w 导入和加载.csv文件
导入和加载.csv文件(write.csv()函数和read.csv()函数)
var1 <- 1:5  
var2 <- (1:5) / 10  
var3 <- c("R", "and", "Data Mining", "Examples", "Case Studies")   
a <- data.frame(var1, var2, var3)   
names(a) <- c("VariableInt", "VariableReal", "VariableChar")   
write.csv(a, "data/dummmyData.csv", row.names = FALSE)  
b <- read.csv("data/dummmyData.csv") 

csv <- read.csv("tot5.csv",header=T, stringsAsFactors=F)         #header 第一行是否作为标题
w 导入SPSS/SAS/Matlab等数据集
# 导入spss的sav格式数据则要用到foreign扩展包,加载后直接用read.spss读取sav文件  
library(foreign)  
mydata=read.spss('d:/test.sav')  
# 上面的函数在很多情况下没能将sav文件中的附加信息导进来,例如数据的label,  
# 那么建议用Hmisc扩展包的spss.get函数,效果会更好一些。  
library(Hmisc)  
data=spss.get("D:/test.sav") 
w 导入数据库中的数据
library(RODBC)  
Connection <- odbcConnect(dsn="servername",uid="userid",pwd="******")  
Query <- "SELECT * FROM lib.table WHERE ..."  
# Query <- readChar("data/myQuery.sql", nchars=99999) 或者选择从SQL文件中读入语句  
myData <- sqlQuery(Connection, Query, errors=TRUE)  
odbcCloseAll() 

来自 http://blog.csdn.net/meegle/article/details/14164471

7、文件读取

Data() #样本数据
read.table 读取类似于表格的文件,后最不限制,支持分隔符,支持表头
read.csv,readHTMLTable,SQL(需要RMySQL)
底层的就是,scan(单元),readlines(行)
最最底层的,file,gzfile,zfile,open
load: 导入R格式的数据,后缀为.Rdata

8、文件输出

R控制台: print, cat (好用一些,内部可重定向)
cat(data,file=filename,append=T)
文件:sink:适合脚本的输出,由一对命令控制,sink(filename)  ......   sink() 
高级:write.csv,save

9、索引与查找

向量索引 用[],[1:5,]  [T,F,T],支持逻辑索引
列表索引 用[[]], 类似于元胞,一个中括号返回的是子列表。两个返回的才是元素
名称索引 用$   如data.frame里,x$a

逻辑查找
x<-x[x>1]  #记住圆括号一定是用于函数的

NA查找
is.na  这是一个函数,可以控制向量里面的NA值
但是在一些复杂的数据结构中不宜删除NA值,但其又不能用于统计,于是很多函数有这样一个参数,na.rm=TRUE

概率函数

d=密度函数
p=分布函数
q=分位数函数
r=生成随机数函数

数据狂操作

http://athenaxu.blog.163.com/blog/static/205722039201421253349239/

控制流

apply:将函数应用到数据的某一个维度上
lapply/sapply: 将函数应用到列表上

机器学习

1、主成分分析

princomp(x,)

hclust(d, method = "complete", members=NULL)

2、典型相关分析

用于分析两组变量之间的相关性

cancor(x, y, xcenter = TRUE, ycenter = TRUE)

3、mlogit 多类别逻辑回归

4、e1071中的svm

上一篇下一篇

猜你喜欢

热点阅读