精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

提升R代碼運算效率的11個實用方法

大數據
R 是一款優秀的開源統計應用語言,它直觀、易用、低成本,而且還有龐大的社區支持。但是當我們利用R語言處理大型數據集時,for循環語句的運算效率總是非常低。本文將介紹幾種方法,幫助你以輕松地處理1億行以上的數據集。

眾所周知,當我們利用R語言處理大型數據集時,for循環語句的運算效率非常低。有許多種方法可以提升你的代碼運算效率,但或許你更想了解運算效率能得到多大的提升。本文將介紹幾種適用于大數據領域的方法,包括簡單的邏輯調整設計、并行處理和Rcpp的運用,利用這些方法你可以輕松地處理1億行以上的數據集。

[[162790]]

讓我們嘗試提升往數據框中添加一個新變量過程(該過程中包含循環和判斷語句)的運算效率。下面的代碼輸出原始數據框:

# Create the data frame
col1 <- runif (12^5, 0, 2)
col2 <- rnorm (12^5, 0, 2)
col3 <- rpois (12^5, 3)
col4 <- rchisq (12^5, 2)
df <- data.frame (col1, col2, col3, col4)

逐行判斷該數據框(df)的總和是否大于4,如果該條件滿足,則對應的新變量數值為’greaterthan4’,否則賦值為’lesserthan4’。

# Original R code: Before vectorization and pre-allocation
system.time({
for (i in 1:nrow(df)) { # for every row
if ((df[i, 'col1'] + df[i, 'col2'] + df[i, 'col3'] + df[i, 'col4']) > 4) { # check if > 4
df[i, 5] <- "greater_than_4" # assign 5th column
} else {
df[i, 5] <- "lesser_than_4" # assign 5th column
}
}
})

本文中所有的計算都在配置了2.6Ghz處理器和8GB內存的MAC OS X中運行。

1.向量化處理和預設數據庫結構

循環運算前,記得預先設置好數據結構和輸出變量的長度和類型,千萬別在循環過程中漸進性地增加數據長度。接下來,我們將探究向量化處理是如何提高處理數據的運算速度。

# after vectorization and pre-allocation
output <- character (nrow(df)) # initialize output vector
system.time({
for (i in 1:nrow(df)) {
if ((df[i, 'col1'] + df[i, 'col2'] + df[i, 'col3'] + df[i, 'col4']) > 4) {
output[i] <- "greater_than_4"
} else {
output[i] <- "lesser_than_4"
}
}
df$output})

2.將條件語句的判斷條件移至循環外

將條件判斷語句移至循環外可以提升代碼的運算速度,接下來本文將利用包含100,000行數據至1,000,000行數據的數據集進行測試:

# after vectorization and pre-allocation, taking the condition checking outside the loop.
output <- character (nrow(df))
condition <- (df$col1 + df$col2 + df$col3 + df$col4) > 4  # condition check outside the loop
system.time({
for (i in 1:nrow(df)) {
if (condition[i]) {
output[i] <- "greater_than_4"
} else {
output[i] <- "lesser_than_4"
}
}
df$output <- output
})

3.只在條件語句為真時執行循環過程

另一種優化方法是預先將輸出變量賦值為條件語句不滿足時的取值,然后只在條件語句為真時執行循環過程。此時,運算速度的提升程度取決于條件狀態中真值的比例。

本部分的測試將和case(2)部分進行比較,和預想的結果一致,該方法確實提升了運算效率。

output <- c(rep("lesser_than_4", nrow(df)))
condition <- (df$col1 + df$col2 + df$col3 + df$col4) > 4
system.time({
for (i in (1:nrow(df))[condition]) {  # run loop only for true conditions
if (condition[i]) {
output[i] <- "greater_than_4"
}
}
df$output
})

4.盡可能地使用 ifelse()語句

利用ifelse()語句可以使你的代碼更加簡便。ifelse()的句法格式類似于if()函數,但其運算速度卻有了巨大的提升。即使是在沒有預設數據結構且沒有簡化條件語句的情況下,其運算效率仍高于上述的兩種方法。

system.time({
output <- ifelse ((df$col1 + df$col2 + df$col3 + df$col4) > 4, "greater_than_4", "lesser_than_4")
df$output <- output
})

5.使用 which()語句

利用which()語句來篩選數據集,我們可以達到Rcpp三分之一的運算速率。

# Thanks to Gabe Becker
system.time({
want = which(rowSums(df) > 4)
output = rep("less than 4", times = nrow(df))
output[want] = "greater than 4"
})
# nrow = 3 Million rows (approx)
user  system elapsed
0.396   0.074   0.481

6.利用apply族函數來替代for循環語句

本部分將利用apply()函數來計算上文所提到的案例,并將其與向量化的循環語句進行對比。該方法的運算效率優于原始方法,但劣于ifelse()和將條件語句置于循環外端的方法。該方法非常有用,但是當你面對復雜的情形時,你需要靈活運用該函數。

# apply family
system.time({
myfunc <- function(x) {
if ((x['col1'] + x['col2'] + x['col3'] + x['col4']) > 4) {
"greater_than_4"
} else {
"lesser_than_4"
}
}
output <- apply(df[, c(1:4)], 1, FUN=myfunc)  # apply 'myfunc' on every row
df$output <- output
})

7.利用compiler包中的字節碼編譯函數cmpfun()

這可能不是說明字節碼編譯有效性的***例子,但是對于更復雜的函數而言,字節碼編譯將會表現地十分優異,因此我們應當了解下該函數。

# byte code compilation
library(compiler)
myFuncCmp <- cmpfun(myfunc)
system.time({
output <- apply(df[, c (1:4)], 1, FUN=myFuncCmp)
})

8.利用Rcpp

截至目前,我們已經測試了好幾種提升運算效率的方法,其中***的方法是利用ifelse()函數。如果我們將數據量增大十倍,運算效率將會變成啥樣的呢?接下來我們將利用Rcpp來實現該運算過程,并將其與ifelse()進行比較。

library(Rcpp)
sourceCpp("MyFunc.cpp")
system.time (output <- myFunc(df)) # see Rcpp function below

下面是利用C++語言編寫的函數代碼,將其保存為“MyFunc.cpp”并利用sourceCpp進行調用。

  1. // Source for MyFunc.cpp 
  2. #include 
  3. using namespace Rcpp; 
  4. // [[Rcpp::export]] 
  5. CharacterVector myFunc(DataFrame x) { 
  6. NumericVector col1 = as(x["col1"]); 
  7. NumericVector col2 = as(x["col2"]); 
  8. NumericVector col3 = as(x["col3"]); 
  9. NumericVector col4 = as(x["col4"]); 
  10. int n = col1.size(); 
  11. CharacterVector out(n); 
  12. for (int i=0; i 4){ 
  13. out[i] = "greater_than_4"
  14. else { 
  15. out[i] = "lesser_than_4"
  16. return out; 

9.利用并行運算

并行運算的代碼:

# parallel processing
library(foreach)
library(doSNOW)
cl <- makeCluster(4, type="SOCK") # for 4 cores machine
registerDoSNOW (cl)
condition <- (df$col1 + df$col2 + df$col3 + df$col4) > 4
# parallelization with vectorization
system.time({
output <- foreach(i = 1:nrow(df), .combine=c) %dopar% {
if (condition[i]) {
return("greater_than_4")
} else {
return("lesser_than_4")
}
}
})
df$output <- output

10.盡早地移除變量并恢復內存容量

在進行冗長的循環計算前,盡早地將不需要的變量移除掉。在每次循環迭代運算結束時利用gc()函數恢復內存也可以提升運算速率。

11.利用內存較小的數據結構

data.table()是一個很好的例子,因為它可以減少數據的內存,這有助于加快運算速率。

dt <- data.table(df)  # create the data.table
system.time({
for (i in 1:nrow (dt)) {
if ((dt[i, col1] + dt[i, col2] + dt[i, col3] + dt[i, col4]) > 4) {
dt[i, col5:="greater_than_4"]  # assign the output as 5th column
} else {
dt[i, col5:="lesser_than_4"]  # assign the output as 5th column
}
}
})

總結

方法:速度, nrow(df)/time_taken = n 行每秒

1.原始方法:1X, 856.2255行每秒(正則化為1)

2.向量化方法:738X, 631578行每秒

3.只考慮真值情況:1002X,857142.9行每秒

4.ifelse:1752X,1500000行每秒

5.which:8806X,7540364行每秒

6.Rcpp:13476X,11538462行每秒

責任編輯:Ophira 來源: 數據工匠
相關推薦

2024-09-24 16:00:00

Python腳本代碼

2025-03-03 00:15:00

JavaScript開發效率

2024-09-26 06:21:59

Python代碼

2020-07-28 09:30:12

開發技能代碼

2022-06-01 10:45:52

C語言代碼優化

2024-10-15 10:11:04

2025-03-04 13:00:00

JavaScrip代碼語言

2025-08-28 09:42:03

2024-02-04 13:36:00

2021-11-03 06:28:21

Python運行速度開發

2024-09-19 16:12:04

2024-10-09 12:18:38

2022-04-29 08:15:40

Python技巧Max

2025-01-10 08:38:16

2020-04-20 17:43:28

Java代碼優化開發

2020-07-08 17:06:00

Python開發工具

2022-05-27 08:40:27

java工具

2024-03-06 09:05:02

KubernetesReadyNode

2019-11-05 14:37:24

Java性能優化編程語言

2015-07-27 09:49:39

IOS開源庫
點贊
收藏

51CTO技術棧公眾號

91精品国产综合久久久久久| 国产精品天天看| 久久久久久久久久久人体| 亚洲香蕉中文网| 久久精品女人天堂av免费观看| 国产色91在线| 91网免费观看| 国产一级淫片a视频免费观看| 日韩中字在线| 亚洲精品久久久一区二区三区| 男女av免费观看| 含羞草www国产在线视频| av不卡免费在线观看| 国产精品日韩在线一区| 国产在线视频99| 欧美日韩性在线观看| 精品女同一区二区| 色www免费视频| 9999精品成人免费毛片在线看| 国产精品理论在线观看| 国产欧美精品一区二区三区| 在线免费观看视频网站| 夜夜嗨一区二区| 欧美床上激情在线观看| 久久中文字幕精品| 女人抽搐喷水高潮国产精品| 91精品午夜视频| 日本www高清视频| 超碰在线网站| 亚洲你懂的在线视频| 午夜一区二区三视频在线观看| 国产成人精品亚洲精品色欲| 欧美aaa在线| 日av在线播放中文不卡| 久久久.www| 五月精品视频| 中文字幕亚洲天堂| 亚洲av综合一区二区| 红杏成人性视频免费看| 欧美一卡二卡在线| 午夜国产福利在线观看| 美女写真久久影院| 日韩欧美国产一区二区| 久色视频在线播放| 超免费在线视频| 亚洲午夜私人影院| 国产一二三区在线播放| 成人国产免费电影| 亚洲日本丝袜连裤袜办公室| 一区精品在线| 日本在线观看免费| 中文字幕第一页久久| 亚洲不卡中文字幕| 日本a一级在线免费播放| av在线播放不卡| 久久福利电影| 深夜福利免费在线观看| 91在线精品一区二区| 久久99九九| 日韩av视屏| 久久久久久毛片| 欧美一级爱爱| 77导航福利在线| 国产精品灌醉下药二区| 伊人久久婷婷色综合98网| 午夜视频在线观看网站| 亚洲免费观看高清完整版在线 | 韩国三级hd中文字幕有哪些| 亚洲我射av| 日韩视频免费观看高清完整版在线观看 | 国精品**一区二区三区在线蜜桃| 国产精品综合久久久| 一区二区三区播放| 国产精品99久| 精品国产乱码久久久久久久软件| 无套内谢的新婚少妇国语播放| 99久久久无码国产精品| 久久国产一区二区| 大地资源中文在线观看免费版| 国产蜜臀av在线一区二区三区| 亚洲精品一区二区三区樱花 | 中文字幕日韩一区| 免费在线黄网站| 日韩激情电影| 欧美三级欧美一级| 男女污污视频网站| 久久精品66| 一区二区成人av| 亚洲最大的黄色网址| 亚洲人体偷拍| 国产精品入口免费视| 亚洲av无码国产精品永久一区| www.99精品| 亚洲一区3d动漫同人无遮挡 | 91人妻一区二区三区| 国产精品乱战久久久| 国产一区二区三区在线观看视频 | 91视频最新| 毛片免费在线| 一区二区三区在线视频观看| 国产a级一级片| 99亚洲男女激情在线观看| 亚洲精品第一页| 任你操精品视频| 亚洲人成在线影院| 国产在线精品播放| 无码国产精品一区二区色情男同| 亚洲国产精品黑人久久久| 大陆极品少妇内射aaaaaa| 久久久一本精品| 欧美电影免费观看完整版| 人妻aⅴ无码一区二区三区| 欧美aa国产视频| 国产精品久久久久久影视| 欧美熟妇乱码在线一区| 国产精品久久久久影院老司 | 国产精品.www| 久久99精品国产麻豆婷婷| 麻豆av一区二区| 欧美日韩经典丝袜| 欧美日韩中文字幕一区| 中文人妻一区二区三区| 欧美日韩91| 成人午夜在线视频一区| 国产在线视频资源| 岛国av在线不卡| 69xxx免费视频| 亚洲情侣在线| 国产一区二区视频在线观看| 蜜桃视频在线入口www| 亚洲成人中文在线| 极品人妻一区二区| 久久精品欧美一区| 国产精品视频自在线| 欧美日韩伦理片| 精品久久久久久| 亚洲av无码专区在线播放中文| 小说区亚洲自拍另类图片专区| 国产福利成人在线| 四虎在线免费看| 黄色精品一区二区| 熟妇人妻久久中文字幕| 尹人成人综合网| 成人综合色站| 丁香影院在线| 精品国产伦一区二区三区免费| 精品97人妻无码中文永久在线| 国产在线精品不卡| 最新视频 - x88av| 国产午夜精品一区在线观看| www日韩欧美| 国产精品久久久久久久免费看| 亚洲欧洲精品一区二区精品久久久 | 欧美激情www| 神马午夜在线视频| 亚洲女人天堂色在线7777| 亚洲视频 欧美视频| 国产视频一区二区三区在线观看| 欧在线一二三四区| 精品国产乱码久久久| 国产精品久久久久久久午夜| 日本成a人片在线观看| 欧美日韩国产一区| 卡通动漫亚洲综合| 国产成人av电影在线观看| 四虎4hu永久免费入口| 7m精品国产导航在线| 97视频在线播放| 国外av在线| 欧美老女人在线| 麻豆国产尤物av尤物在线观看| 成人美女在线视频| 欧美丰满熟妇bbbbbb百度| 免费视频国产一区| 国产欧美日韩精品在线观看| 国产人成网在线播放va免费| 日韩你懂的电影在线观看| 国产无遮挡又黄又爽| 久久亚洲影视婷婷| 欧美特黄aaa| 欧美精品色网| 久久亚洲综合网| 色成人综合网| 国内揄拍国内精品少妇国语| 国产主播福利在线| 日韩限制级电影在线观看| 日韩欧美一区二区一幕| 国产日韩av一区| 初高中福利视频网站| 亚洲一区二区三区四区五区午夜| 亚洲欧美在线网| 97se亚洲国产一区二区三区| 青青精品视频播放| www久久日com| 日韩电影中文字幕av| 亚洲性在线观看| 亚洲成人av一区二区| 天天摸日日摸狠狠添| 成人av网在线| 亚洲最大天堂网| 亚洲一区激情| 国产在线观看欧美| 欧美精品一二| 国产精品国产一区二区| 久久婷婷五月综合色丁香| 韩国v欧美v日本v亚洲| 毛片激情在线观看| 亚洲精品色婷婷福利天堂| 国产不卡精品视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美日韩在线视频免费播放| 国产婷婷色一区二区三区在线| 国产成人av片| 久久精品国产亚洲高清剧情介绍| 日本a在线免费观看| 91日韩在线| 日本一区二区在线视频| 国产成人福利av| 91嫩草在线视频| av成人在线看| 欧美一区二区.| 丁香花视频在线观看| 欧美成人免费在线视频| 成人精品一区二区三区免费| 亚洲精品影视在线观看| 亚洲av永久纯肉无码精品动漫| 欧美日韩国产高清一区二区三区 | 风间由美性色一区二区三区 | 国产精品45p| 18成人免费观看网站下载| 欧美黄页免费| 国产精品国模在线| 欧美magnet| 琪琪亚洲精品午夜在线| 高潮在线视频| 久久久久在线观看| 国产探花在线观看| 欧美激情免费观看| 青草影视电视剧免费播放在线观看| 最新日韩中文字幕| av电影在线网| 中文字幕一区电影| 在线观看黄av| 色哟哟入口国产精品| bbbbbbbbbbb在线视频| 伊人精品在线观看| 都市激情一区| 最近2019中文字幕mv免费看| 日本最黄一级片免费在线| 综合av色偷偷网| 麻豆最新免费在线视频| 久久视频在线观看免费| 国产精品va在线观看视色| 欧美成人一二三| 免费在线播放电影| 国外色69视频在线观看| 波多野结衣视频一区二区| 97视频在线免费观看| 天堂中文在线播放| 日本免费久久高清视频| 日本成人伦理电影| 国产免费一区二区三区香蕉精| 国产电影一区| 国产精品美女诱惑| 午夜a一级毛片亚洲欧洲| 免费久久久一本精品久久区| 欧美限制电影| 91免费视频黄| 日韩午夜av在线| 欧美精品成人网| 极品销魂美女一区二区三区| 永久看看免费大片| www.亚洲色图.com| 黄色片在线观看免费| 自拍偷在线精品自拍偷无码专区| 欧美在线视频第一页| 亚洲va在线va天堂| 日韩乱码一区二区三区| 宅男在线国产精品| 色偷偷在线观看| 国产一区二区三区日韩欧美| 久久99精品久久久久久野外| 久久理论片午夜琪琪电影网| 美女日韩欧美| 92国产精品视频| 日韩精品丝袜美腿| 亚洲一区三区视频在线观看| 亚洲精华国产欧美| 亚洲福利精品视频| 成人久久18免费网站麻豆| 国产aⅴ激情无码久久久无码| 亚洲色图视频免费播放| 男女视频免费看| 欧美精品粉嫩高潮一区二区| 日本激情一区二区| 日韩在线观看免费全集电视剧网站 | 最近日韩中文字幕| 日韩免费av片| 欧美精品久久99久久在免费线| 午夜影院免费视频| 久久天天躁日日躁| 国产日韩电影| 成人欧美一区二区三区视频xxx| 国产毛片一区二区三区| 国产精品av免费观看| 青青草伊人久久| 国产一级二级在线观看| 亚洲三级电影全部在线观看高清| 日日骚av一区二区| 亚洲精品一区二区三区影院| 欧美激情二区| 国产精品久久久久久久久久尿| 国产亚洲精品美女久久| 乱子伦一区二区| 丝袜诱惑亚洲看片| 91精品小视频| 亚洲在线免费播放| 91午夜交换视频| 亚洲欧美中文日韩v在线观看| 色婷婷av在线| 国产视频999| 久久美女视频| 一区二区在线播放视频| 91小视频免费看| 国产午夜精品一区二区理论影院| 91精品国产综合久久精品麻豆| 国产精品久久久久一区二区国产| 78色国产精品| 精品国产一区二区三区成人影院 | 欧美三级华人主播| 日韩午夜精品| 一边摸一边做爽的视频17国产 | 日本韩国欧美在线观看| 成人av在线观| 国产无遮挡又黄又爽| 精品少妇一区二区三区| 在线视频观看国产| 91久久久久久久久久久久久| 国产精品不卡| 91看片破解版| 亚洲精品美国一| 午夜免费福利视频| 久久99精品久久久久久青青91| 国产精品日本一区二区不卡视频| 一区二区冒白浆视频| 狠狠网亚洲精品| 麻豆视频在线免费看| 欧美一区二区三区四区高清| 97caopron在线视频| 91传媒在线免费观看| 欧美理论在线| 亚洲香蕉中文网| 精品久久香蕉国产线看观看gif| 日韩一级片免费看| 欧美性受xxx| 精品国产乱码久久久久久果冻传媒| 欧美性猛交久久久乱大交小说| 国产视频一区不卡| 亚洲一级视频在线观看| 久久精品中文字幕电影| 国产美女视频一区二区| 日本精品久久久久久久久久| www.欧美.com| 做爰视频毛片视频| 久久精品视频播放| 成人影院中文字幕| 欧美在线观看成人| 国产欧美一区二区精品秋霞影院| 亚洲视频久久久| 久久91精品国产| 色综合久久中文| 在线观看的毛片| 亚洲欧美欧美一区二区三区| 国产综合无码一区二区色蜜蜜| 88xx成人精品| 欧美限制电影| 女人扒开腿免费视频app| 精品成人久久av| 成人在线免费看| 国产福利不卡| 日本成人中文字幕在线视频| 黄色片子在线观看| 亚洲精品美女久久久久| 99精品国自产在线| 天堂8在线天堂资源bt| 国产亚洲短视频| 精品国产乱码一区二区三| 7777kkkk成人观看| 888久久久| 老司机福利av| 在线综合+亚洲+欧美中文字幕| 理论片午夜视频在线观看| 亚洲一区二区在线免费观看| 成人综合在线观看| 黄色av一区二区| 国自在线精品视频| 99精品视频精品精品视频| 国产精品无码永久免费不卡| 9191精品国产综合久久久久久| 伊人成综合网站|