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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 《R語言入門》的讀書筆記 本書的重點內容及感悟: 第一章 導言 1、R是一個有著統計分析功能及強大作圖功能的軟件系...
    格式化_001閱讀 12,624評論 0 9
  • R語言簡介 R語言是基于S語言的一種開源實現。S語言是貝爾實驗室最早開發的一種用于統計的工具,后來成為商業的S-P...
    Jtag特工閱讀 3,595評論 1 12
  • 最近在復習python的科學計算,突然心血來潮,想看看R的數據處理和python的區別在哪,所以就有了這篇文章。 ...
    若與閱讀 2,125評論 1 24
  • Step1:下載和安裝R Windows和OS X用戶可以從CRAN(Comprehensive R Archiv...
    胡阿白閱讀 2,132評論 0 3
  • 鄒豪zouhao閱讀 73評論 0 0