1.簡單的算數操做和向量運算html
命令行啓動 R,退出 q(). 能夠在退出時保存項目進度,同目錄下啓動R時能夠恢復進度.express
獲取函數幫助:help(solve) 或者 ?solve ,help.start() 啓動html幫助數組
對於使用某個命令的例子,能夠用example(topic)查看函數
R 大小寫敏感, 命令能夠被;隔開,可使用({})構複合表達式,#開始到句尾爲註釋ui
若是一批命令保存在commands.R中,可使用source("commands.R")執行spa
sink("log.txt")把輸出導入到文件中,sink()把輸出導回控制檯命令行
R建立和控制的實體被稱爲對象,對象經過名字建立和保存.ls()和objects()用來顯示全部對象,rm(object)刪除對象htm
賦值可使用<-,=或兩者->,或者用assign("x",c(1,2,3))來實現。 c()用來構建任意參數造成的向量對象
y=c(x,0,x)能夠造成新向量。1/x能夠顯示出各個元素的倒數。在算數表達式中用向量會讓每一個元素都進行向量運算blog
+-*/ log(),exp(),sin(),cos(),tan(),sqrt(),max(),min(),mean(),sum(),var(計算方差),length().sort(升序)
seq(2,10)等價於2:10. seq有更多參數seq(from=a,to=b,by=c,length=d)參數順序可變,by爲步長.
rep能夠重複對象 rep(c(1:3),times=2) 獲得(1,2,3,1,2,3), rep(c(1:3),each=2)獲得(1,1,2,2,3,3)
邏輯向量:TRUE, FALSE, NA。邏輯運算:<,<=,>,>=,==,!=. &交集運算與,|並集運算或,!非運算
任何含有NA數據的運算結果都是NA,is.na(x)返回一個和x長度相等的向量,x中爲NA的位置爲TRUE,其他爲FALSE
NAN是缺損值如0/0,NA爲不可獲得值
paste()能夠有任意多參數,把他們一個一個連成字符串,如paste(c("x","y"),1:6,sep="")獲得("1x","2y","3x","4y","5x","6y")
一個向量的子集能夠經過在[]中加入索引向量獲得:
1.邏輯向量:此時索引向量須要和邏輯向量長度一致。x[!is.na(x)]取得全部非NA元素做爲子集,(x+1)[(!is.na(x)) & x>0] 把x全部元素加1並生成一個不含NA和負數的子集
2.正整數向量。此時和索引向量對應的元素被選中,長度和索引向量一致,如x[1:10].索引向量長度能夠比原向量長,如c("x","y")[rep(c(1,2,2,1),times=4)]會生成"x","y","y","x"重複四次的向量
3.負整數向量:指定元素排除,如(x[-(1:5)])排除1-5號元素
4.字符串向量:僅僅用於用name屬性來標識元素。如: fruit=c(1,2,3,4);names(fruit)=c("a","b","c","d");num=fruit[c("a","b")]
向量是R裏面最重要的,還有其餘對象好比矩陣matrix,因子factor,列表list,數據框data frame,函數function.
2.對象以及他們的模式和屬性
R中對象的類型包括數值型"numeric",複數型"complex",邏輯型"logical",字符型"character"和原味型"raw"。mode(object) 能夠獲得對象類型。as.character(z), as.integer(z)能夠轉換對象類型,class(object)看對象所屬的類
使用length(alpha)=3 改變alpha的長度爲3. e=numeric(),e爲空對象,e[3]=10把e長度擴展爲3,前兩個元素爲NA。
3.有序因子和無序因子
因子(factor)用來儲存類別變量和有序變量,這種變量不能用來計算,只能用來分類和計數。例子:
4.數組和矩陣
數組是多個類型相同元素的集合,維度向量是一個正整數向量,若它長度爲K則是K維,數組中元素下標能夠從1到維度向量中對應元素值
若z是一個含有1500元素的向量dim(z)=c(3,5,100)把z變爲三維3*5*100數組,每一維對應長度爲3,5,100. matrix()和array()也能夠定義數組
數組的排列次序是按列的,第一下標變化最快,最後下標變化慢。若維度向量爲a(3,2),則6個元素依次爲a[1,1],a[2,1],a[3,1],a[1,2],a[2,2],a[3,2]
數組分隔能夠經過在下標處給定索引向量實現,如a[1,]表明a[1,1]和a[1,2];用dim(z)能夠顯式訪問維度向量
索引數組:能夠根據索引數組給數組中不規則的元素集合賦值或者將數組中特定元素返回一個向量中,例子:
經過array構建數組:Z=array(datavector,dimvector),好比z=array(h,dim=c(3,4,2))利用h構建3*4*2的數組,h若小於24則數據循環使用
t()轉置數組,nrow(),ncol()返回行數和列數 ,*使矩陣對應元素相乘, %*%是矩陣乘法
求解線性方程組 b=A%*% x,若給出b和A,x就是根,可用slove(A,b)得出x,若要求A的逆,則直接使slove(A)
使用cbind(arg1,arg2...)和rbind(arg1,rag2...)合併矩陣,前者橫向合併,後者縱向合併
可使用vec =as.vector(X) 和vec=c(X)把矩陣X轉化爲簡單向量
5.列表和數據框
列表是一個以對象的集合構成的對象,包含的對象稱爲份量,份量能夠是不懂模式和類型。
Lst=list(name="fred",wify="mary",no.children=3,child,ages=c(4,7,9)).Lst[[1]]能夠訪問第一個份量,Lst[[4]][1]訪問第四個份量的第一個元素
也可使用Lst$name,Lst$wift這種份量名來訪問份量,或者Lst[["name"]],份量能夠用下標擴充,Lst[5]=list(matrix=Mat)
能夠用鏈接函數c()鏈接份量。List.ABC=c(list.A,list.B,list.C)
數據框是屬於data.frame類的列表,
6.從文件中讀取數據
若是變量主要在數據框操做,建議用read.table(),它讀取整個數據框,並且須要外部文件有特定的格式,第一行是各個變量的名字,隨後行第一個條目是行編號,其餘條目是各個變量值,例如HousePrice = read.table("house.data"),使用參數header=True能夠忽略行標籤
也能夠用scan()讀入文件,如inp=scan("input.data",list(a="",b=0,c=0))這樣會把inp設爲一個列表,列表的三個向量類型分別是字符,數值,數值。爲了把他們分爲獨立的向量,使用如下方式:label=inp[[1]],x=inp[[2]],y=inp[[3]],能夠在list中給他們命名(就是abc),這樣就能夠直接用名字訪問,如label=inp$a。
R自帶100多個數據集,用data()能夠顯示可用數據集,訪問特定包的數據使用data(package="rpart")。若要修改數據集,可使用xnew=edit(xold),若要在原數據集上修改使用fix(xold).
8.機率分佈
恩。。。複雜的數學,有空再看吧
9.成組,循環和條件控制
R是表達式語言,由於它僅有的命令形式就是返回結果和表達式。命令能夠用大括號全在一塊兒,分號分開此時一組命令的結果是最後一個命令的值,組依舊是表達式因此能夠放在更大的括弧裏。
if語句:if(expr1) expr2 else expr3,&&和||經常使用語控制語句中,注意&和|做用於向量全部元素而&&和||值做用於長度爲1的向量。條件語句有函數的形式,爲ifelse(condition,a,b),返回一個和最長參數向量一樣長的向量,condition[1]爲真時對應元素a[i],不然b[i]。
循環控制有for循環,repeat和while:for(name in expr1) expr2
repeat expr ,while(condition)expr。 break能夠結束任何循環,並且是結束repeat循環的惟一辦法,next用來結束一次循環
10.編寫函數
一個函數經過如下語句定義:name = function(arg1,arg2...) expression
能夠定義新的二元操做符: "%!%" = function(X,y){......},注意要使用引號,而後就能夠以X%!%y的形式使用了。
調用參數是若是使用參數名,則參數位置能夠任意,如fun1=function(data,data.frame,graph,limit)在調用時能夠 ans=fun1(data =d,limit=20,graph=True,data.fram=df),在函數定義時能夠設置參數默認值。
參數是能夠被傳遞的,如下函數fun1內使用了函數par,...代表把該函數的參數傳遞給par
fun1 <- function(data, data.frame, graph=TRUE, limit=20, ...) {if(graph) par(pch="*", ...)}
在函數內的賦值都是暫時的,若要全局賦值或者永久賦值可使用<<-或者函數assign(一個對象的累決定了它會如何被泛型函數處理,如泛型函數plot(),summary(),anova(),調用的對象不一樣,函數內的處理方式也不一樣
使用methods(class="date.frame")能夠查看data.frame類可使用的泛型函數