Re: [問題] apply 取代for
※ 引述《disney82231 (小刀會序曲)》之銘言:
: [問題類型]:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
:
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉)
: [問題敘述]:
: 用for 寫了一個迴圈,想用apply寫出一樣的結果
: 另外想請問,在多數情況下,apply都能取代for嗎
: [程式範例]:
: for (i in 2:10){
: x$v1[x[,i]==1] <- i }
: }
: 若每列x的第i行=1時,x每列的第一行改成i
: [關鍵字]:
: apply for
測試了一下我原本預想的方法,發現用for就很快了XDDD
然後回一下,像這種case,其實用apply是不適合的
基本上直接去修改原本的值是最簡單的
library(data.table)
## random generation
x <- matrix(rbinom(1e6, 3, 0.5), 1e5)
# check dimension of x
dim(x) # 100000, 10
## copy x
x2 <- x
## for-loop method
st <- proc.time()
for (i in 2:10)
x2[x2[ , i] == 1, ] <- i
proc.time() - st
# user system elapsed
# 0.02 0.00 0.01
## vectorized method
st <- proc.time()
# get indices which is equal to 1 in column 2 to 10
idxDT <- data.table(which(x[ , 2:10] == 1, arr.ind = TRUE))
# calculate what the value at i-th location will change to
out <- idxDT[ , .(value = min(col) + 1), by = .(row)]
# assign the values
x[out$row, ] <- out$value
proc.time() - st
# user system elapsed
# 0.12 0.01 0.14
## check equality
all.equal(x, x2) # TRUE
: > sessionInfo()
R version 3.4.2 (2017-09-28)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.32.56
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1522337707.A.E77.html
※ 編輯: celestialgod (118.170.32.56), 03/29/2018 23:39:40
→
03/30 05:34,
6年前
, 1F
03/30 05:34, 1F
→
03/30 05:35,
6年前
, 2F
03/30 05:35, 2F
→
03/30 05:41,
6年前
, 3F
03/30 05:41, 3F
→
03/30 05:41,
6年前
, 4F
03/30 05:41, 4F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
10
20
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章