R語言程式設計藝術 11 14 15

2021-07-10 04:54:17 字數 1947 閱讀 2373

#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...