一个不推荐自己编程,高度优化的面向对象的静态统计语言
1、序
用知乎体来整理
先假设啥好的软件都没有,我们先来想想一个优秀的科学计算软件需要哪些东西。
- 编程简洁但又能进行一定的自由定制,比如写一个自己行业所需要的工具箱之类的
- 速度快,能适应越来越大的数据流
- 具有可视化功能,可以绘制丰富的图表
那应该怎么设计软件?
- 设计各种高级的数据类
1). 支持字符串和数组的向量类型,在MATLAB中两者是分开来的- 数据类的基本操作或者函数,初始化,索引,切片,逻辑索引,逻辑判断,赋值,
- 简单的数据生成,如数列,特殊矩阵等
- 控制流
- 绘图
- 丰富的函数库,线性代数,概率,图像处理,IO,时间序列,机器学习常用算法
- 外部接口,混合编程
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