R 統計與做圖---入門(一)數據類型

R語言,一種自由軟件編程語言與操做環境,主要用於統計分析、繪圖、數據挖掘。R原本是由來自新西蘭奧克蘭大學的Ross IhakaRobert Gentleman開發(也所以稱爲R),如今由「R開發核心團隊」負責開發。R是基於S語言的一個GNU計劃項目,因此也能夠看成S語言的一種實現,一般用S語言編寫的代碼均可以不做修改的在R環境下運行。R的語法是來自Scheme。程序員

R的源代碼可自由下載使用,亦有已編譯的可執行文件版本能夠下載,可在多種平臺下運行,包括UNIX(也包括FreeBSD和Linux)、Windows和MacOS。R主要是以命令行操做,同時有人開發了幾種圖形用戶界面。---維基百科編程

我是走出校園以後才知道到有一門語言和開發環境叫R,在此以前個人編程認知範圍僅限於於C/C++(VC++)和Matlab。它幫我完成了職場的第一件工做,畫一個聚類熱力圖。此文介紹一下我學習使用R的經歷和心得。windows

爲何是R? 由於它開源免費跨平臺,對沒錢的我的和不想付錢的公司是個好東西,對須要多樣性工具的人是個好消息,對不用windows的程序員更是個好消息。可是因爲它每次將全部數據讀入內存,所以面對大數據顯得力不從心。數組

1. 軟件環境官方首頁:http://www.r-project.org/編程語言

  安裝方法不作描述, 官網上優詳盡的描述和介紹函數

2. 基本知識工具

2.1 數據類型:學習

普通變量: 包括數字、字符等大數據

> num=1
> num
[1] 1
> num=2.5
> num
[1] 2.5
> str="R"
> str
[1] "R"
> str="R language"
> str
[1] "R language"

 

矢量:基本和編程語言種的數組相同, 能夠手動定義,能夠函數生成,也可已由其餘數據轉換。
(1) 手動定義使用函數 c()spa

> vec=c(1,2,3)
> vec
[1] 1 2 3
> vec=c(1.2,3.5,4.1)
> vec
[1] 1.2 3.5 4.1
> vec=c("a","b","c")
> vec
[1] "a" "b" "c"
#整型和浮點型數據,整型將自動轉化成浮點型數據
> vec=c(1,2.0,3.7) 
> vec
[1] 1.0 2.0 3.7
#數字和字符串,數字將自動轉換成字符串
> vec=c("a",6,7.9,"str") 
> vec
[1] "a" "6" "7.9" "str"
# 訪問矢量元素,下標從[1]開始,[0]中存儲矢量的數據類型
> vec[0]
character(0)
> vec[1]
[1] "a"
# 普通變量能夠看做是特殊的矢量,[0]
> num=2.5
> num[0]
numeric(0)
> num[1]
[1] 2.5
> str="R language"
> str[0]
character(0)
> str[1]
[1] "R language"

(2) 函數建立,常見好用的向量建立函數優seq,rep等

# seq(x,y,by=z) 建立以z爲步長從x到y的向量,by缺省時z=1
> seq(3,8,by=2)
[1] 3 5 7
> seq(3,8)
[1] 3 4 5 6 7 
#rep(x,y), 建立一個向量,將x重複y次
> rep(1,5)
[1] 1 1 1 1 1
# x自己也能夠是矢量
> rep(c(1,3),5)
 [1] 1 3 1 3 1 3 1 3 1 3
# x:y, 建立重x到y步長爲1的向量,同 seq(x,y)
> 1:5
> 1:5
[1] 1 2 3 4 5
# ?fun, 問號鏈接函數,查看函數用法
> ?rep

矩陣:矩陣相似二維數組,它的一行或者一列便是一個向量

# 使用matrix()生成一個3x4的矩陣,全部元素值爲5, 具體用法參照?matrix
> mat=matrix(5,3,4)
> mat
     [,1] [,2] [,3] [,4]
[1,]    5    5    5    5
[2,]    5    5    5    5
[3,]    5    5    5    5
# 訪問元素使用[x,y], 當x或y缺省時訪問正行或整列,每行或沒列均是一個向量
> mat[2,3]=2
> mat[2,3]=3
> mat
     [,1] [,2] [,3] [,4]
[1,]    5    5    5    5
[2,]    5    2    3    5
[3,]    5    5    5    5
#訪問第2行
> mat[2,]
[1] 5 2 3 5
# 訪問第3列
> mat[,3]
[1] 5 3 5
# 矩陣可由多個向量合併而來,使用rbind(行合併)或cbind(列合併)
> rbind(1:5,1:5,1:5)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    1    2    3    4    5
[3,]    1    2    3    4    5
> cbind(1:5,1:5,1:5)
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3
[4,]    4    4    4

數據框(data.frame):也是一種存儲表table的數據格式,它能夠優本身的表頭和屬性名稱,每一列是一個向量,但每一行不是。不一樣列之間的數據屬性互不干擾。

> name=c("Tom","Jerry","Lilei")
> score=c(90,70,80)
> excellent=c(TRUE,FALSE,TRUE)
> exam=data.frame(name,score,excellent)
> exam
   name score excellent
1   Tom    90      TRUE
2 Jerry    70     FALSE
3 Lilei    80      TRUE
# 訪問方式同矩陣,由[], 每行仍爲一個子數據框,沒列則仍爲一個向量
> tmp=exam[1,]
> tmp
  name score excellent
1  Tom    90      TRUE
> tmp=exam[,1]
> tmp
[1] Tom   Jerry Lilei
Levels: Jerry Lilei Tom
# 可經過原有向量名訪問指定列,使用 $ 符號
> exam$name #於exam[,1] 相同
[1] Tom   Jerry Lilei
Levels: Jerry Lilei Tom
# 可自定義數據框的行名或列名,使用rownames或colnames
> rownames(exam)=exam$name
> exam
       name score excellent
Tom     Tom    90      TRUE
Jerry Jerry    70     FALSE
Lilei Lilei    80      TRUE
# 數據框可由數據文件讀入,注意:若輸入文件中帶有表頭和屬性名稱,則左上角值應爲缺省,即文件的第一行逼其餘行少一個數據,
# 此時R將自動將第一行和第一列定義爲colnames和rownames,不然將會被看成數據讀入到數據框中
> exam=read.csv("exam.csv") #以逗號 > exam=read.table("exam.txt") #以tab

列表:一種更爲自由的數據類型,能夠存儲多種數據類型,並自定義名稱

> List=list(Var="R language", Vec=vec, Mat=mat, DF=exam)  
> List
$Var
[1] "R language"

$Vec
[1] "a"   "6"   "7.9" "str"

$Mat
     [,1] [,2] [,3] [,4]
[1,]    5    5    5    5
[2,]    5    2    3    5
[3,]    5    5    5    5

$DF
       name score excellent
Tom     Tom    90      TRUE
Jerry Jerry    70     FALSE
Lilei Lilei    80      TRUE
     
> List$Var
[1] "R language"
> List$Vec
[1] "a"   "6"   "7.9" "str"
> List$Mat
     [,1] [,2] [,3] [,4]
[1,]    5    5    5    5
[2,]    5    2    3    5
[3,]    5    5    5    5
> List$DF
       name score excellent
Tom     Tom    90      TRUE
Jerry Jerry    70     FALSE
Lilei Lilei    80      TRUE

未完待續……

相關文章
相關標籤/搜索