R语言入门

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

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

    原文作者:JSong1122
    原文地址: https://www.jianshu.com/p/a5afb09d64a6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞