一個不推薦自己編程,高度優(yōu)化的面向對象的靜態(tài)統(tǒng)計語言
1、序
用知乎體來整理
先假設啥好的軟件都沒有掷豺,我們先來想想一個優(yōu)秀的科學計算軟件需要哪些東西。
- 編程簡潔但又能進行一定的自由定制薄声,比如寫一個自己行業(yè)所需要的工具箱之類的
- 速度快当船,能適應越來越大的數據流
- 具有可視化功能,可以繪制豐富的圖表
那應該怎么設計軟件默辨?
- 設計各種高級的數據類
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破讨,統(tǒng)計常用的一種格式旨巷,類似于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蝶糯、系統(tǒng)內存操作
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環(huán)境變量
JDK下載:http://pan.baidu.com/s/1eQrKIaA
配置JAVA的環(huán)境變量: 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值蕾哟,但其又不能用于統(tǒng)計一忱,于是很多函數有這樣一個參數,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