序
用知乎体来回答这个问题,持续整理中
先假设啥好的软件都没有,我们先来想想一个优秀的科学计算软件需要哪些东西。
-
编程简洁但又能进行一定的自由定制,比如写一个自己行业所需要的工具箱之类的
-
速度快,能适应越来越大的数据流
-
具有可视化功能,可以绘制丰富的图表
那应该怎么设计软件?
-
设计各种高级的数据类
1). 支持字符串和数组的向量类型,在MATLAB中两者是分开来的
-
数据类的基本操作或者函数,初始化,索引,切片,逻辑索引,逻辑判断,赋值,
-
简单的数据生成,如数列,特殊矩阵等
-
控制流
-
绘图
-
丰富的函数库,线性代数,概率,图像处理,IO,时间序列,机器学习常用算法
-
外部接口,混合编程
前言
1、 一个不推荐自己编程,高度优化的面向对象的静态统计语言 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, mode(底层/一层), class, str dim head tail
字符串操作 toupper, tolower,nchar,substr,substring(取多组),paste,grep,strsplit
系统内存操作 getwd,setwd,ls,rm,list.files
数据I/O
文件读取 read.table 读取类似于表格的文件,后最不限制,支持分隔符,支持表头 read.csv,readHTMLTable,SQL(需要RMySQL) 底层的就是,scan(单元),readlines(行) 最最底层的,file,gzfile,zfile,open load: 导入R格式的数据,后缀为.Rdata
文件输出 R控制台: print, cat (好用一些,内部可重定向) cat(data,file=filename,append=T) 文件:sink:适合脚本的输出,由一对命令控制,sink(filename) ...... sink() 高级:write.csv,save
索引与查找
向量索引 用[],[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=生成随机数函数
控制流
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