#11. 字串操作
a<-c("equator","north pole","south pole")
grep("pole",a)#在字串a中搜尋pole
nchar(a)#返回字串a的長度(r語言中的字串末尾沒有空字元null)
#對於非字元形式就要用到hadley wickham寫的stringr包
paste("north","pole",sep="")
b<-sprintf("the square of %d is %d",8,8^2)#按一定格式把若干個元件組合成字串
substr(b,5,10)#返回給定字串中指定位置範圍5:10上的子字串
strsplit(b," ")#根據b中的字串,把字串b拆分成若干個子字串
regexpr("uat","equator")#在字串equator中尋找uat,返回與uat匹配的全部子字串的起始位置
#正規表示式:用來描述一系列字串的簡略表示式
grep("[au]",a)#表示a中含有字母a或u的字串
grep("o.e",a)#表示a中含有以o開頭,後跟任意乙個字元,並以e結尾的字串
grep("n..t",a)#表示a中含有以n開頭,後跟任意兩個字元,並以t結尾的字串
#元字元:不按照字面意思理解的字元
grep(".",a)#得到的不是想要的結果,因為.是元字元
grep("\\.",a)#反斜槓\使它脫離句點的元字元屬性,用兩個\的原因是\自身也必須脫離元字元屬性
#14. 速度與記憶體
#使r**速度更快的辦法:
#1.通過向量化的方式、使用位元組碼編譯
#2.把最消耗cpu的部分用編譯型語言編寫,如使用c
#3.將**用某種並行的方式進行編寫
#可怕的for迴圈:
#1.用向量化提公升速度:
#有可能加速**的向量化函式包括:ifelse(),which(),where(),any(),all(),cumsum(),cumprod()
#對於矩陣,rowsums(),colsums()
#對於「窮舉所有組合」,combn(),outer(),lower.tri(),upper.tri(),expand.grid()
#system.time(**)#**執行時間
#outer(x,y,fun)#將fun函式應用於x和y中的元素所有可能配對之上
#函式式程式設計和記憶體問題
#向量賦值問題:
a<-c(1,4,6,8,3,7)
a[3]<-9#先建立a的副本,再將副本中的第3個元素更改為9,最後再將得到的向量賦值給a
#表面上看只修改了向量的乙個元素,但含義是「整個向量都被重新計算了」
#改變時拷貝:r經常會採取改變時拷貝的機制,同樣也會存在例外
b<-runif(10);
tracemem(b)#返回b的記憶體位址
b[3]<-9;tracemem(b)
#利用rprof()來尋找**的瓶頸
x<-runif(10)
rprof()
fz<-function(x) x[3]<-3
invisible(fz(x))#不讓輸出結果被展示出來
rprof(null)
summaryrprof()
#位元組碼編譯:
library(compiler)
x<-runif(100000);y<-runif(100000);z<-c()
fz<-function(x,y)
cf<-cmpfun(fz)
system.time(cf(x,y))
#記憶體無法裝下資料的處理辦法:資料分塊或利用r軟體包來進行記憶體管理
rmysql包:r到sql資料庫的乙個介面
biglm包;可以在非常大的資料集上進行回歸和廣義線性模型的分析
bigmemory包:不僅可以將資料儲存在硬碟上,還可以將資料儲存在機器的主記憶體上
R語言程式設計藝術(5)R語言程式設計高階
本文對應 r語言程式設計藝術 第14章 效能提公升 速度和記憶體 第15章 r與其他語言的介面 第16章 r語言平行計算 效能提公升 速度和記憶體 要使r 執行速度更快,有以下建議 通過向量化的方式優化 使用位元組碼編譯等 將 中最消耗cpu的核心部分用編譯型語言編寫,如c或c 將 用某種並行的方式...
《R語言程式設計藝術》 2 10 測試向量相等
假設我們要測試兩個向量是否相等,使用 的樸素方法將不可行 事實上,是乙個向量化的函式。語句x y是將函式 應用到x和y的每一組元素上,得到乙個布林值的向量。那麼我們可以做什麼呢?一種選擇是結合 的向量化本質,應用函式all 對 的結果應用all 函式會詢問其所有元素是否全為真,它與詢問x與y是否完全...
R語言程式設計藝術 第九 十章
第9章 物件導向的程式設計 9.1.x 章,我有點看的稀里糊塗的,太程式設計化了。汗.好吧,後面講的s4和s3,區別我是懂得,但是不會用。目前估計看不懂,等我學會python再來看看,畢竟不是專業的程式設計師。資料狗不好做。直接到9.4.5 exists 函式 根據其引數是否存在返回true或fal...