เจเจน เจจเฉเจ เจเจนเจจเจพเจ เจฒเจ เจฆเจฟเจฒเจเจธเจชเฉ เจตเจพเจฒเจพ เจนเฉเจตเฉเจเจพ เจเฉ R - data.table เจฒเจ เจเฉเจฌเจฒเจฏเฉเจฒเจฐ เจกเฉเจเจพ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจจ, เจ เจคเฉ เจตเฉฑเจ-เจตเฉฑเจ เจเจฆเจพเจนเจฐเจฃเจพเจ เจตเจฟเฉฑเจ เจเจธเจฆเฉ เจตเจฐเจคเฉเจ เจฆเฉ เจฒเจเจเจคเจพ เจจเฉเฉฐ เจฆเฉเจ เจเฉ เจเฉเจธเจผ เจนเฉ เจธเจเจฆเฉ เจนเจจเฅค
เจเฉฑเจ เจเฉฐเจเฉ เจเจฆเจพเจนเจฐเจฃ เจฆเฉเจเจฐเจพ เจชเฉเจฐเฉเจฐเจฟเจค , เจ
เจคเฉ เจเจฎเฉเจฆ เจเจฐเจฆเฉ เจนเฉเจ เจเจฟ เจคเฉเจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจธเจฆเจพ เจฒเฉเจ เจชเฉเฉเจน เจฒเจฟเจ เจนเฉ, เจฎเฉเจ เจเฉเจก เจเจชเจเฉเจฎเจพเจเจเฉเจธเจผเจจ เจ
เจคเฉ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฆเฉ เจ
เจงเจพเจฐ เจคเฉ เจกเฉเฉฐเจเจพเจ เจจเจพเจฒ เจเฉเจ เจเจฐเจจ เจฆเจพ เจชเฉเจฐเจธเจคเจพเจต เจเจฐเจฆเจพ เจนเจพเจ เจกเฉเจเจพ.เจเฉเจฌเจฒ.
เจเจพเจฃ-เจชเจเจพเจฃ: data.table เจเจฟเฉฑเจฅเฉเจ เจเจเจเจฆเฉ เจนเฉ?
เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจจเฉเฉฐ เจฆเฉเจฐเฉเจ เจนเฉ เจเจพเจฃเจจเจพ เจธเจผเฉเจฐเฉ เจเจฐเจจเจพ เจธเจญ เจคเฉเจ เจตเจงเฉเจ เจนเฉ, เจ เจฐเจฅเจพเจค, เจกเฉเจเจพ เจธเจเฉเจฐเจเจเจฐเจเจผ เจฆเฉ เจจเจพเจฒ, เจเจฟเฉฑเจฅเฉเจ data.table เจเจฌเจเฉเจเจ (เจเจธ เจคเฉเจ เจฌเจพเจ เจฆ DT เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ) เจชเฉเจฐเจพเจชเจค เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
เจเจฐเฉ
เจเฉเจก
## arrays ---------
arrmatr <- array(1:20, c(4,5))
class(arrmatr)
typeof(arrmatr)
is.array(arrmatr)
is.matrix(arrmatr)
เจ เจเจฟเจนเฉ เจเฉฑเจ เจฌเจฃเจคเจฐ เจเฉฑเจ เจเจฐเฉ เจนเฉ (?เจฌเฉเจธ::เจเจฐเฉ). เจนเฉเจฐ เจญเจพเจธเจผเจพเจตเจพเจ เจตเจพเจเจ, เจเฉฑเจฅเฉ เจเจฐเฉ เจฌเจนเฉ-เจเจฏเจพเจฎเฉ เจนเจจเฅค เจนเจพเจฒเจพเจเจเจฟ, เจฆเจฟเจฒเจเจธเจช เจเฉฑเจฒ เจเจน เจนเฉ เจเจฟ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเฉฑเจ เจฆเฉ-เจ เจฏเจพเจฎเฉ เจเจฐเฉ เจฎเฉเจเฉเจฐเจฟเจเจธ เจเจฒเจพเจธ เจคเฉเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจจเจพ เจธเจผเฉเจฐเฉ เจเจฐเจฆเจพ เจนเฉ (? เจ เจงเจพเจฐ::เจฎเฉเจเฉเจฐเจฟเจเจธ), เจ เจคเฉ เจเฉฑเจ เจเฉฑเจ-เจ เจฏเจพเจฎเฉ เจเจฐเฉ, เจเฉ เจเจฟ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจตเฉ เจนเฉ, เจเฉฑเจ เจตเฉเจเจเจฐ เจคเฉเจ เจชเฉเจฐเจพเจชเจค เจจเจนเฉเจ เจนเฉเฉฐเจฆเจพ (?เจฌเฉเจธ::เจตเฉเจเจเจฐ).
เจเจน เจธเจฎเจเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจเจฟ เจซเฉฐเจเจธเจผเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจฟเจธเฉ เจตเฉ เจตเจธเจคเฉ เจตเจฟเฉฑเจ เจฎเฉเจเฉเจฆ เจกเฉเจเจพ เจฆเฉ เจเจฟเจธเจฎ เจฆเฉ เจเจพเจเจ เจเฉเจคเฉ เจเจพเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเฉ เจ เจงเจพเจฐ::เจเจฟเจธเจฎ, เจเฉ เจเจฟ เจ เจจเฉเจธเจพเจฐ เจ เฉฐเจฆเจฐเฉเจจเฉ เจเจฟเจธเจฎ เจฆเจพ เจตเจฐเจฃเจจ เจตเจพเจชเจธ เจเจฐเจฆเจพ เจนเฉ เจเจฐ เจ เฉฐเจฆเจฐเฉเจจเฉ - เจฎเฉเจฒ เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจญเจพเจธเจผเจพ เจฆเจพ เจเจฎ เจชเฉเจฐเฉเจเฉเจเฉเจฒ C.
เจเจฟเจธเฉ เจตเจธเจคเฉ เจฆเฉ เจธเจผเฉเจฐเฉเจฃเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจ เจฒเจ เจเฉฑเจ เจนเฉเจฐ เจเจฎเจพเจเจก เจนเฉ เจ เจงเจพเจฐ::เจเจฒเจพเจธ, เจตเฉเจเจเจฐเจพเจ เจฆเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ, เจตเฉเจเจเจฐ เจเจฟเจธเจฎ เจตเจพเจชเจธ เจเจฐเจฆเจพ เจนเฉ (เจเจน เจ เฉฐเจฆเจฐเฉเจจเฉ เจจเจพเจฎ เจคเฉเจ เจตเฉฑเจเจฐเจพ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจชเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจกเฉเจเจพ เจเจฟเจธเจฎ เจจเฉเฉฐ เจธเจฎเจเจฃ เจฆเฉ เจตเฉ เจเจเจฟเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉ)เฅค
เจฆเฉ เจธเฉเจเฉ
เจเฉฑเจ เจฆเฉ-เจ เจฏเจพเจฎเฉ เจเจฐเฉ เจคเฉเจ, เจเจฟเจธเจจเฉเฉฐ เจฎเฉเจเฉเจฐเจฟเจเจธ เจตเฉ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ, เจคเฉเจธเฉเจ เจธเฉเจเฉ เจตเจฟเฉฑเจ เจเจพ เจธเจเจฆเฉ เจนเฉ (?เจฌเฉเจธ::เจธเฉเจเฉ).
เจเฉเจก
## lists ------------------
mylist <- as.list(arrmatr)
is.vector(mylist)
is.list(mylist)
เจเจ เจเฉเจเจผเจพเจ เจเฉฑเจเฉ เจธเจฎเฉเจ เจนเฉเฉฐเจฆเฉเจเจ เจนเจจ:
- เจฎเฉเจเฉเจฐเจฟเจเจธ เจฆเจพ เจฆเฉเจธเจฐเจพ เจเจฏเจพเจฎ เจธเจฎเฉเจเจฆเจพ เจนเฉ, เจฏเจพเจจเฉ เจ เจธเฉเจ เจเฉฑเจเฉ เจธเจฎเฉเจ เจเฉฑเจ เจธเฉเจเฉ เจ เจคเฉ เจเฉฑเจ เจตเฉเจเจเจฐ เจฆเฉเจตเฉเจ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเฉ เจนเจพเจเฅค
- เจเจธ เจคเจฐเฉเจนเจพเจ เจธเฉเจเฉ เจเจนเจจเจพเจ เจธเจผเฉเจฐเฉเจฃเฉเจเจ เจคเฉเจ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจเจน เจงเจฟเจเจจ เจตเจฟเฉฑเจ เจฐเฉฑเจเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจเจฟ เจเฉฑเจ เจธเฉเจเฉ เจคเฉฑเจค เจเจฐเฉ เจฎเฉเจเฉเจฐเจฟเจเจธ เจฆเฉ เจเฉฑเจ เจธเฉเฉฑเจฒ เจคเฉเจ เจเฉฑเจ (เจธเจเฉเจฒเจฐ) เจฎเฉเฉฑเจฒ เจจเจพเจฒ เจฎเฉเจฒ เจเจพเจเจฆเจพ เจนเฉเจตเฉเจเจพเฅค
เจเจฟเจเจเจเจฟ เจเฉฑเจ เจธเฉเจเฉ เจเฉฑเจ เจตเฉเจเจเจฐ เจตเฉ เจนเฉ, เจเจธ เจฒเจ เจเฉเจ เจตเฉเจเจเจฐ เจซเฉฐเจเจธเจผเจจ เจฒเจพเจเฉ เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเจจเฅค
เจกเจพเจเจพเจซเฉเจฐเฉเจฎ
เจคเฉเจธเฉเจ เจเฉฑเจ เจธเฉเจเฉ, เจฎเฉเจเฉเจฐเจฟเจเจธ เจเจพเจ เจตเฉเจเจเจฐ เจคเฉเจ เจเฉฑเจ เจกเฉเจเจพเจซเฉเจฐเฉเจฎ เจคเฉฑเจ เจเจพ เจธเจเจฆเฉ เจนเฉ (?base::data.frame).
เจเฉเจก
## data.frames ------------
df <- as.data.frame(arrmatr)
df2 <- as.data.frame(mylist)
is.list(df)
df$V6 <- df$V1 + df$V2
เจเจธ เจฌเจพเจฐเฉ เจฆเจฟเจฒเจเจธเจช เจเฉ เจนเฉ: เจกเฉเจเจพเจซเฉเจฐเฉเจฎ เจธเฉเจเฉ เจคเฉเจ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉ! เจกเฉเจเจพเจซเฉเจฐเฉเจฎ เจเจพเจฒเจฎ เจธเฉเจเฉ เจธเฉเฉฑเจฒ เจนเจจเฅค เจเจน เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉเจตเฉเจเจพ เจเจฆเฉเจ เจ เจธเฉเจ เจธเฉเจเฉเจเจ เจตเจฟเฉฑเจ เจฒเจพเจเฉ เจเฉเจคเฉ เจซเฉฐเจเจธเจผเจจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจเฅค
เจกเฉเจเจพ.เจเฉเจฌเจฒ
เจกเฉเจเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเฉ (?data.table::data.table) เจคเฉเจ เจนเฉ เจธเจเจฆเจพ เจนเฉ เจกเจพเจเจพเจซเฉเจฐเฉเจฎ, เจธเฉเจเฉ, เจตเฉเจเจเจฐ เจเจพเจ เจฎเฉเจเจฐเจฟเจเจธเฅค เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเจธ เจคเจฐเฉเจนเจพเจ (เจฅเจพเจ)
เจเฉเจก
## data.tables -----------------------
library(data.table)
data.table::setDT(df)
is.list(df)
is.data.frame(df)
is.data.table(df)
เจเจน เจฒเจพเจญเจฆเจพเจเจ เจนเฉ เจเจฟ, เจเฉฑเจ เจกเฉเจเจพเจซเฉเจฐเฉเจฎ เจตเจพเจเจ, เจเฉฑเจ DT เจเฉฑเจ เจธเฉเจเฉ เจฆเฉเจเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเจพ เจนเฉเฅค
เจกเฉเจเฉ เจ เจคเฉ เจฎเฉเจฎเฉเจฐเฉ
R เจฌเฉเจธ เจตเจฟเฉฑเจ เจนเฉเจฐ เจธเจพเจฐเฉเจเจ เจตเจธเจคเฉเจเจ เจฆเฉ เจเจฒเจ, DTs เจนเจตเจพเจฒเฉ เจฆเฉเจเจฐเจพ เจชเจพเจธ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจเฅค เจเฉเจเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจจเจตเฉเจ เจฎเฉเจฎเฉเจฐเฉ เจเฉเจคเจฐ เจตเจฟเฉฑเจ เจเฉฑเจ เจเจพเจชเฉ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจซเฉฐเจเจธเจผเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ data.table::copy เจเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจชเฉเจฐเจพเจฃเฉ เจตเจธเจคเฉ เจคเฉเจ เจเฉเจฃ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค
เจเฉเจก
df2 <- df
df[V1 == 1, V2 := 999]
data.table::fsetdiff(df, df2)
df2 <- data.table::copy(df)
df[V1 == 2, V2 := 999]
data.table::fsetdiff(df, df2)
เจเจน เจเจพเจฃ-เจชเจเจพเจฃ เจธเจฎเจพเจชเจค เจเจฐเจฆเจพ เจนเฉเฅค เจกเฉเจเฉ เจเจฐ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจขเจพเจเจเฉ เจฆเฉ เจตเจฟเจเจพเจธ เจฆเฉ เจเฉฑเจ เจจเจฟเจฐเฉฐเจคเจฐเจคเจพ เจนเฉ, เจเฉ เจฎเฉเฉฑเจ เจคเฉเจฐ 'เจคเฉ เจกเฉเจเจพเจซเฉเจฐเฉเจฎ เจเจฒเจพเจธ เจฆเฉเจเจ เจตเจธเจคเฉเจเจ 'เจคเฉ เจเฉเจคเฉ เจเจ เจเจพเจฐเจเจพเจ เจฆเฉ เจตเจฟเจธเจฅเจพเจฐ เจ เจคเฉ เจชเฉเจฐเจตเฉเจ เจฆเฉ เจเจพเจฐเจจ เจตเจพเจชเจฐเจฆเจพ เจนเฉเฅค เจเจธเฉ เจธเจฎเฉเจ, เจนเฉเจฐ เจเจฆเจฟเจฎ เจคเฉเจ เจตเจฟเจฐเจพเจธเจค เจจเฉเฉฐ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจฐเฉฑเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉ.
data.table เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉเจเจ เจเฉเจ เจเจฆเจพเจนเจฐเจฃเจพเจ
เจเฉฑเจ เจธเฉเจเฉ เจตเจพเจเจ...
เจเฉฑเจ เจกเฉเจเจพเจซเฉเจฐเฉเจฎ เจเจพเจ เจกเฉเจเฉ เจฆเฉเจเจ เจเจคเจพเจฐเจพเจ เจเฉฑเจคเฉ เจฆเฉเจนเจฐเจพเจเจฃเจพ เจเฉฑเจ เจเฉฐเจเจพ เจตเจฟเจเจพเจฐ เจจเจนเฉเจ เจนเฉ, เจเจฟเจเจเจเจฟ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจ เจฒเฉเจช เจเฉเจก R เจฌเจนเฉเจค เจนเฉเจฒเฉ C, เจชเจฐ เจเจพเจฒเจฎเจพเจ เจจเฉเฉฐ เจฒเฉเจช เจเจฐเจจเจพ เจเจพเจซเจผเฉ เจธเฉฐเจญเจต เจนเฉ, เจเฉ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจฌเจนเฉเจค เจเฉเจเฉ เจนเฉเฉฐเจฆเฉ เจนเจจเฅค เจเจพเจฒเจฎเจพเจ เจตเจฟเฉฑเจเฉเจ เจฒเฉฐเจเจฆเฉ เจนเฉเจ, เจฏเจพเจฆ เจฐเฉฑเจเฉ เจเจฟ เจนเจฐเฉเจ เจเจพเจฒเจฎ เจเฉฑเจ เจธเฉเจเฉ เจฆเจพ เจเฉฑเจ เจคเฉฑเจค เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเจฟเจธ เจตเจฟเฉฑเจ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจเฉฑเจ เจตเฉเจเจเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจ เจคเฉ เจตเฉเจเจเจฐเจพเจ เจเฉฑเจคเฉ เจเจชเจฐเฉเจธเจผเจจ เจญเจพเจธเจผเจพ เจฆเฉ เจฌเฉเจจเจฟเจเจฆเฉ เจซเฉฐเจเจธเจผเจจเจพเจ เจตเจฟเฉฑเจ เจเฉฐเจเฉ เจคเจฐเฉเจนเจพเจ เจตเฉเจเจเจฐเจพเจเจเจผเจก เจนเฉเฉฐเจฆเฉ เจนเจจเฅค เจคเฉเจธเฉเจ เจธเฉเจเฉเจเจ เจ เจคเฉ เจตเฉเจเจเจฐเจพเจ เจฒเจ เจเจฎ เจเฉเจฃ เจเจชเจฐเฉเจเจฐ เจตเฉ เจตเจฐเจค เจธเจเจฆเฉ เจนเฉ: `[[`, `$`.
เจเฉเจก
## operations on data.tables ------------
#using list properties
df$'V1'[1]
df[['V1']]
df[[1]][1]
sapply(df, class)
sapply(df, function(x) sum(is.na(x)))
เจตเฉเจเจเฉเจฐเจพเจเจเจผเฉเจธเจผเจจ
เจเฉเจเจฐ เจเฉฑเจ เจตเฉฑเจกเฉ เจกเฉเจเฉ เจฆเฉเจเจ เจฒเจพเจเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจฒเฉฐเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจคเจพเจ เจธเจญ เจคเฉเจ เจตเจงเฉเจ เจนเฉฑเจฒ เจตเฉเจเจเจฐเจพเจเจเจผเฉเจธเจผเจจ เจจเจพเจฒ เจเฉฑเจ เจซเฉฐเจเจธเจผเจจ เจฒเจฟเจเจฃเจพ เจนเฉเจตเฉเจเจพเฅค เจชเจฐ เจเฉ เจเจน เจเฉฐเจฎ เจจเจนเฉเจ เจเจฐเจฆเจพ, เจคเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฏเจพเจฆ เจฐเฉฑเจเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจเจฟ เจเฉฑเจเจฐ เจ เฉฐเจฆเจฐ เจกเฉเจเฉ เจ เจเฉ เจตเฉ เจเฉฑเจเจฐ เจจเจพเจฒเฉเจ เจคเฉเจเจผ เจนเฉ R, เจเจฟเจเจเจเจฟ เจเจน เจเจธ 'เจคเฉ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ C.
เจเจฒเฉ เจเจธเจจเฉเฉฐ 100K เจเจคเจพเจฐเจพเจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจตเฉฑเจกเฉ เจเจฆเจพเจนเจฐเจจ 'เจคเฉ เจ เจเจผเจฎเจพเจเฅค เจ เจธเฉเจ เจตเฉเจเจเจฐ เจเจพเจฒเจฎ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจธเจผเจฌเจฆเจพเจ เจตเจฟเฉฑเจเฉเจ เจชเจนเจฟเจฒเจพ เจ เฉฑเจเจฐ เจเฉฑเจขเจพเจเจเฉ w.
เจ เฉฑเจชเจกเฉเจ
เจเฉเจก
library(magrittr)
library(microbenchmark)
## Bigger example ----
rown <- 100000
dt <-
data.table(
w = sapply(seq_len(rown), function(x) paste(sample(letters, 3, replace = T), collapse = ' '))
, a = sample(letters, rown, replace = T)
, b = runif(rown, -3, 3)
, c = runif(rown, -3, 3)
, e = rnorm(rown)
) %>%
.[, d := 1 + b + c + rnorm(nrow(.))]
# vectorization
microbenchmark({
dt[
, first_l := unlist(strsplit(w, split = ' ', fixed = T))[1]
, by = 1:nrow(dt)
]
})
# second
first_l_f <- function(sd)
{
strsplit(sd, split = ' ', fixed = T) %>%
do.call(rbind, .) %>%
`[`(,1)
}
dt[, first_l := NULL]
microbenchmark({
dt[
, first_l := .(first_l_f(w))
]
})
# third
first_l_f2 <- function(sd)
{
strsplit(sd, split = ' ', fixed = T) %>%
unlist %>%
matrix(nrow = 3) %>%
`[`(1,)
}
dt[, first_l := NULL]
microbenchmark({
dt[
, first_l := .(first_l_f2(w))
]
})
เจชเจนเจฟเจฒเจพเจ เจเจคเจพเจฐเจพเจ เจเฉฑเจคเฉ เจฆเฉเจนเจฐเจพเจ เจเจฒเจพเจ:
เจฏเฉเจจเจฟเจ: เจฎเจฟเจฒเฉเจธเจเจฟเฉฐเจ
expr เจฎเจฟเฉฐเจ
{ dt[, `:=`(first_l, unlist(strsplit(w, split = " ", fixed = T))[1]), by = 1:nrow(dt)] } 439.6217
lq เจฆเจพ เจฎเจคเจฒเจฌ เจฎเฉฑเจงเจฎ uq เจ เจงเจฟเจเจคเจฎ เจจเฉเจตเจฒ เจนเฉ
451.9998 460.1593 456.2505 460.9147 621.4042 100
เจฆเฉเจเฉ เจฐเจจ, เจเจฟเฉฑเจฅเฉ เจธเฉเจเฉ เจจเฉเฉฐ เจเฉฑเจ เจฎเฉเจเฉเจฐเจฟเจเจธ เจตเจฟเฉฑเจ เจฌเจฆเจฒ เจเฉ เจ เจคเฉ เจธเฉเจเจเจพเจเจ 1 เจฆเฉ เจจเจพเจฒ เจเฉเจเฉเฉ 'เจคเฉ เจคเฉฑเจค เจฒเฉ เจเฉ เจตเฉเจเจเจฐเจพเจเจเจผเฉเจธเจผเจจ เจนเฉเฉฐเจฆเฉ เจนเฉ (เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ เจตเฉเจเจเจฐเจพเจเจเจผเฉเจธเจผเจจ เจเจชเจฃเฉ เจเจช เจนเฉ)เฅค เจธเฉเจงเจพเจฐ: เจซเฉฐเจเจธเจผเจจ เจชเฉฑเจงเจฐ 'เจคเฉ เจตเฉเจเจเจฐเจพเจเจเจผเฉเจธเจผเจจ strsplit, เจเฉ เจเฉฑเจ เจตเฉเจเจเจฐ เจจเฉเฉฐ เจเจจเจชเฉเจ เจตเจเฉเจ เจธเจตเฉเจเจพเจฐ เจเจฐ เจธเจเจฆเจพ เจนเฉเฅค เจเจน เจชเจคเจพ เจเจฒเจฆเจพ เจนเฉ เจเจฟ เจธเฉเจเฉ เจจเฉเฉฐ เจฎเฉเจเฉเจฐเจฟเจเจธ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฃ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจชเจฃเฉ เจเจช เจตเจฟเฉฑเจ เจตเฉเจเจเจฐเจพเจเจเจผเฉเจธเจผเจจ เจจเจพเจฒเฉเจ เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจฎเฉเจธเจผเจเจฒ เจนเฉ, เจชเจฐ เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจเจน เจเฉเจฐ-เจตเฉเจเจเฉเจฐเจพเจเจเจผเจก เจธเฉฐเจธเจเจฐเจฃ เจจเจพเจฒเฉเจ เจฌเจนเฉเจค เจคเฉเจเจผ เจนเฉเฅค
เจฏเฉเจจเจฟเจ: เจฎเจฟเจฒเฉเจธเจเจฟเฉฐเจ
expr min lq เจฎเจคเจฒเจฌ เจฎเฉฑเจงเจฎ uq เจ เจงเจฟเจเจคเจฎ เจจเฉเจตเจฒ
{ dt[, `:=`(first_l, .(first_l_f(w))] } 93.07916 112.1381 161.9267 149.6863 185.9893 442.5199 100
เจตเจฟเฉฑเจ เจฎเฉฑเจงเจฎ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจตเฉเจ 3 เจตเจพเจฐ.
เจคเฉเจเฉ เจฆเฉเฉ, เจเจฟเฉฑเจฅเฉ เจฎเฉเจเฉเจฐเจฟเจเจธ เจตเจฟเฉฑเจ เจชเจฐเจฟเจตเจฐเจคเจจ เจฏเฉเจเจจเจพ เจจเฉเฉฐ เจฌเจฆเจฒเจฟเจ เจเจฟเจ เจธเฉเฅค
เจฏเฉเจจเจฟเจ: เจฎเจฟเจฒเฉเจธเจเจฟเฉฐเจ
expr min lq เจฎเจคเจฒเจฌ เจฎเฉฑเจงเจฎ uq เจ เจงเจฟเจเจคเจฎ เจจเฉเจตเจฒ
{ dt[, `:=`(first_l, .(first_l_f2(w))] } 32.60481 34.13679 40.4544 35.57115 42.11975 222.972 100
เจตเจฟเฉฑเจ เจฎเฉฑเจงเจฎ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจตเฉเจ 13 เจตเจพเจฐ.
เจคเฉเจนเจพเจจเฉเฉฐ เจเจธ เจฎเจพเจฎเจฒเฉ เจจเจพเจฒ เจชเฉเจฐเจฏเฉเจ เจเจฐเจจ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ, เจเจฟเฉฐเจจเจพ เจเจผเจฟเจเจฆเจพ, เจเจน เจฌเจฟเจนเจคเจฐ เจนเฉเจตเฉเจเจพ.
เจตเฉเจเจเจฐเจพเจเจเจผเฉเจธเจผเจจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจนเฉเจฐ เจเจฆเจพเจนเจฐเจจ, เจเจฟเฉฑเจฅเฉ เจเฉเจเจธเจ เจตเฉ เจนเฉ, เจชเจฐ เจเจน เจ เจธเจฒ เจธเจฅเจฟเจคเฉเจเจ เจฆเฉ เจจเฉเฉเฉ เจนเฉ: เจธเจผเจฌเจฆเจพเจ เจฆเฉ เจตเฉฑเจ-เจตเฉฑเจ เจฒเฉฐเจฌเจพเจ, เจธเจผเจฌเจฆเจพเจ เจฆเฉ เจตเฉฑเจเจฐเฉ เจธเฉฐเจเจฟเจเฅค เจคเฉเจนเจพเจจเฉเฉฐ เจชเจนเจฟเจฒเฉ 3 เจธเจผเจฌเจฆ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค เจเจธ เจคเจฐเฉเจนเจพเจ:

เจเฉฑเจฅเฉ เจชเจฟเจเจฒเจพ เจซเฉฐเจเจธเจผเจจ เจเฉฐเจฎ เจจเจนเฉเจ เจเจฐเจฆเจพ, เจเจฟเจเจเจเจฟ เจตเฉเจเจเจฐ เจตเฉฑเจ-เจตเฉฑเจ เจฒเฉฐเจฌเจพเจ เจฆเฉ เจนเฉเฉฐเจฆเฉ เจนเจจ, เจ
เจคเฉ เจ
เจธเฉเจ เจฎเฉเจเจฐเจฟเจเจธ เจฆเจพ เจเจเจพเจฐ เจธเฉเฉฑเจ เจเจฐเจฆเฉ เจนเจพเจเฅค เจเจ เจเฉฐเจเจฐเจจเฉเฉฑเจ 'เจคเฉ เจเจฒเฉ-เจฆเฉเจเจฒเฉ เจเฉเจฆเจฃ เจฆเฉเจเจฐเจพ เจเจธเจจเฉเฉฐ เจฆเฉเจฌเจพเจฐเจพ เจเจฐเฉเจเฅค
เจเฉเจก
# fourth
rown <- 100000
words <-
sapply(
seq_len(rown)
, function(x){
nwords <- rbinom(1, 10, 0.5)
paste(
sapply(
seq_len(nwords)
, function(x){
paste(sample(letters, rbinom(1, 10, 0.5), replace = T), collapse = '')
}
)
, collapse = ' '
)
}
)
dt <-
data.table(
w = words
, a = sample(letters, rown, replace = T)
, b = runif(rown, -3, 3)
, c = runif(rown, -3, 3)
, e = rnorm(rown)
) %>%
.[, d := 1 + b + c + rnorm(nrow(.))]
first_l_f3 <- function(sd, n)
{
l <- strsplit(sd, split = ' ', fixed = T)
maxl <- max(lengths(l))
sapply(l, "length<-", maxl) %>%
`[`(n,) %>%
as.character
}
microbenchmark({
dt[
, (paste0('w_', 1:3)) := lapply(1:3, function(x) first_l_f3(w, x))
]
})
dt[
, (paste0('w_', 1:3)) := lapply(1:3, function(x) first_l_f3(w, x))
]
เจฏเฉเจจเจฟเจ: เจฎเจฟเจฒเฉเจธเจเจฟเฉฐเจ
expr min lq เจฎเจคเจฒเจฌ เจฎเฉฑเจงเจฎเจพเจจ
{dt[, `:=`((เจชเฉเจธเจ0(โw_โ, 1:3)), strsplit(w, split = "", fixed = T))] } 851.7623 916.071 1054.5 1035.199
uq เจ เจงเจฟเจเจคเจฎ เจจเฉเจตเจฒ
1178.738 1356.816 100
เจธเจเฉเจฐเจฟเจชเจ 1 เจธเจเจฟเฉฐเจ เจฆเฉ เจเจธเจค เจฐเจซเจผเจคเจพเจฐ เจจเจพเจฒ เจเฉฑเจฒเฉเฅค เจญเฉเฉเจพ เจจเจนเฉเจ.
เจเฉฑเจ เจเฉเจจ เจจเจพเจฒ เจเฉเฉเจฟเจ...
เจคเฉเจธเฉเจ เจเฉเจจเจฟเฉฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจกเฉเจเฉ เจตเจธเจคเฉเจเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจเจน เจธเฉฑเจเฉ เจชเจพเจธเฉ เจฌเจฐเฉเจเจ เจธเฉฐเจเฉเจเจธ เจจเฉเฉฐ เจเฉเฉเจจ เจตเจพเจเจ เจเจพเจชเจฆเจพ เจนเฉ, เจเจผเจฐเฉเจฐเฉ เจคเฉเจฐ 'เจคเฉ เจเฉฐเจกเฅค
เจเฉเจก
# chaining
res1 <- dt[a == 'a'][sample(.N, 100)]
res2 <- dt[, .N, a][, N]
res3 <- dt[, coefficients(lm(e ~ d))[1], a][, .(letter = a, coef = V1)]
เจชเจพเจเจชเจพเจ เจฐเจพเจนเฉเจ เจตเจนเจฟเจฃเจพ ...
เจเจนเฉ เจเจชเจฐเฉเจธเจผเจจ เจชเจพเจเจชเจฟเฉฐเจ เจฆเฉเจเจฐเจพ เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเจจ, เจเจน เจธเจฎเจพเจจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจชเจฐ เจเจพเจฐเจเจธเจผเฉเจฒ เจคเฉเจฐ 'เจคเฉ เจตเจงเฉเจฐเฉ เจ เจฎเฉเจฐ เจนเฉ, เจเจฟเจเจเจเจฟ เจคเฉเจธเฉเจ เจเจฟเจธเฉ เจตเฉ เจขเฉฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจจเจพ เจเจฟ เจธเจฟเจฐเจซเจผ เจกเฉเจเฉ. เจเจ DT 'เจคเฉ เจเจ เจซเจฟเจฒเจเจฐเจพเจ เจฆเฉ เจจเจพเจฒ เจธเจพเจกเฉ เจธเจฟเฉฐเจฅเฉเจเจฟเจ เจกเฉเจเจพ เจฒเจ เจฒเฉเจเจฟเจธเจเจฟเจ เจฐเฉเจเจฐเฉเจธเจผเจจ เจเฉเจฃเจพเจเจ เจชเฉเจฐเจพเจชเจค เจเจฐเฉเจเฅค
เจเฉเจก
# piping
samplpe_b <- dt[a %in% head(letters), sample(b, 1)]
res4 <-
dt %>%
.[a %in% head(letters)] %>%
.[,
{
dt0 <- .SD[1:100]
quants <-
dt0[, c] %>%
quantile(seq(0.1, 1, 0.1), na.rm = T)
.(q = quants)
}
, .(cond = b > samplpe_b)
] %>%
glm(
cond ~ q -1
, family = binomial(link = "logit")
, data = .
) %>%
summary %>%
.[[12]]
DT เจฆเฉ เจ เฉฐเจฆเจฐ เจ เฉฐเจเฉเฉ, เจฎเจธเจผเฉเจจ เจธเจฟเจเจฒเจพเจ เจ เจคเฉ เจนเฉเจฐ เจฌเจนเฉเจค เจเฉเจ
เจคเฉเจธเฉเจ เจฒเฉเจเจฌเจกเจพ เจซเฉฐเจเจธเจผเจจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจชเจฐ เจเจ เจตเจพเจฐ เจเจนเจจเจพเจ เจจเฉเฉฐ เจตเฉฑเจเจฐเฉ เจคเฉเจฐ 'เจคเฉ เจฌเจฃเจพเจเจฃเจพ เจฌเจฟเจนเจคเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจชเฉเจฐเฉ เจกเฉเจเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจชเจพเจเจชเจฒเจพเจเจจ เจจเฉเฉฐ เจฒเจฟเจเฉ, เจ เจคเฉ เจ เฉฑเจเฉ เจตเจงเฉ - เจเจน เจกเฉเจเฉ เจฆเฉ เจ เฉฐเจฆเจฐ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเจจเฅค เจเจฆเจพเจนเจฐเจจ เจเจชเจฐเฉเจเจค เจธเจพเจฐเฉเจเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจจเจพเจฒ เจญเจฐเจชเฉเจฐ เจนเฉ, เจจเจพเจฒ เจนเฉ เจกเฉเจเฉ เจเจฐเจธเจจเจฒ เจฆเฉเจเจ เจเจ เจเจชเจฏเฉเจเฉ เจเฉเจเจผเจพเจ (เจเจฟเจตเฉเจ เจเจฟ เจเฉฑเจ เจฒเจฟเฉฐเจ เจฐเจพเจนเฉเจ เจกเฉเจเฉ เจฆเฉ เจ เฉฐเจฆเจฐ เจกเฉเจเฉ เจจเฉเฉฐ เจเจเจธเฉเจธ เจเจฐเจจเจพ, เจเจ เจตเจพเจฐ เจเฉเจฐเจฎเจตเจพเจฐ เจจเจนเฉเจ, เจชเจฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจธเจผเจพเจฎเจฒ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ)เฅค
เจเฉเจก
# function
rm(lm_preds)
lm_preds <- function(
sd, by, n
)
{
if(
n < 100 |
!by[['a']] %in% head(letters, 4)
)
{
res <-
list(
low = NA
, mean = NA
, high = NA
, coefs = NA
)
} else {
lmm <-
lm(
d ~ c + b
, data = sd
)
preds <-
stats::predict.lm(
lmm
, sd
, interval = "prediction"
)
res <-
list(
low = preds[, 2]
, mean = preds[, 1]
, high = preds[, 3]
, coefs = coefficients(lmm)
)
}
res
}
res5 <-
dt %>%
.[e < 0] %>%
.[.[, .I[b > 0]]] %>%
.[, `:=` (
low = as.numeric(lm_preds(.SD, .BY, .N)[[1]])
, mean = as.numeric(lm_preds(.SD, .BY, .N)[[2]])
, high = as.numeric(lm_preds(.SD, .BY, .N)[[3]])
, coef_c = as.numeric(lm_preds(.SD, .BY, .N)[[4]][1])
, coef_b = as.numeric(lm_preds(.SD, .BY, .N)[[4]][2])
, coef_int = as.numeric(lm_preds(.SD, .BY, .N)[[4]][3])
)
, a
] %>%
.[!is.na(mean), -'e', with = F]
# plot
plo <-
res5 %>%
ggplot +
facet_wrap(~ a) +
geom_ribbon(
aes(
x = c * coef_c + b * coef_b + coef_int
, ymin = low
, ymax = high
, fill = a
)
, size = 0.1
, alpha = 0.1
) +
geom_point(
aes(
x = c * coef_c + b * coef_b + coef_int
, y = mean
, color = a
)
, size = 1
) +
geom_point(
aes(
x = c * coef_c + b * coef_b + coef_int
, y = d
)
, size = 1
, color = 'black'
) +
theme_minimal()
print(plo)
เจธเจฟเฉฑเจเจพ
เจฎเฉเจ เจเจฎเฉเจฆ เจเจฐเจฆเจพ เจนเจพเจ เจเจฟ เจฎเฉเจ เจเฉฑเจ เจธเฉฐเจชเฉเจฐเจจ, เจชเจฐ, เจฌเฉเจธเจผเฉฑเจ, เจธเฉฐเจชเฉเจฐเจจ เจจเจนเฉเจ, data.table เจตเจฐเจเฉ เจเฉฑเจ เจตเจธเจคเฉ เจฆเฉ เจคเจธเจตเฉเจฐ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฏเฉเจ เจธเฉ, เจเจฐ เจเจฒเจพเจธเจพเจ เจคเฉเจ เจตเจฟเจฐเจพเจธเจค เจจเจพเจฒ เจเฉเฉเฉเจเจ เจเจธเจฆเฉเจเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจคเฉเจ เจธเจผเฉเจฐเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ เจ เจคเฉ เจเจธ เจฆเฉเจเจ เจเจชเจฃเฉเจเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจ เจคเฉ เจตเจพเจคเจพเจตเจฐเจฃ เจฆเฉ เจจเจพเจฒ เจเจคเจฎ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค . เจฎเฉเจจเฉเฉฐ เจเจฎเฉเจฆ เจนเฉ เจเจฟ เจเจน เจคเฉเจนเจพเจจเฉเฉฐ เจเจธ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจจเฉเฉฐ เจเฉฐเจฎ เจฒเจ เจฌเจฟเจนเจคเจฐ เจขเฉฐเจ เจจเจพเจฒ เจธเจฟเฉฑเจเจฃ เจ เจคเฉ เจตเจฐเจคเจฃ เจตเจฟเฉฑเจ เจฎเจฆเจฆ เจเจฐเฉเจเจพ เจฎเจจเฉเจฐเฉฐเจเจจ.

เจคเฉเจนเจพเจกเจพ เจงเฉฐเจจเจตเจพเจฆ!
เจชเฉเจฐเจพ เจเฉเจก
เจเฉเจก
## load libs ----------------
library(data.table)
library(ggplot2)
library(magrittr)
library(microbenchmark)
## arrays ---------
arrmatr <- array(1:20, c(4,5))
class(arrmatr)
typeof(arrmatr)
is.array(arrmatr)
is.matrix(arrmatr)
## lists ------------------
mylist <- as.list(arrmatr)
is.vector(mylist)
is.list(mylist)
## data.frames ------------
df <- as.data.frame(arrmatr)
is.list(df)
df$V6 <- df$V1 + df$V2
## data.tables -----------------------
data.table::setDT(df)
is.list(df)
is.data.frame(df)
is.data.table(df)
df2 <- df
df[V1 == 1, V2 := 999]
data.table::fsetdiff(df, df2)
df2 <- data.table::copy(df)
df[V1 == 2, V2 := 999]
data.table::fsetdiff(df, df2)
## operations on data.tables ------------
#using list properties
df$'V1'[1]
df[['V1']]
df[[1]][1]
sapply(df, class)
sapply(df, function(x) sum(is.na(x)))
## Bigger example ----
rown <- 100000
dt <-
data.table(
w = sapply(seq_len(rown), function(x) paste(sample(letters, 3, replace = T), collapse = ' '))
, a = sample(letters, rown, replace = T)
, b = runif(rown, -3, 3)
, c = runif(rown, -3, 3)
, e = rnorm(rown)
) %>%
.[, d := 1 + b + c + rnorm(nrow(.))]
# vectorization
# zero - for loop
microbenchmark({
for(i in 1:nrow(dt))
{
dt[
i
, first_l := unlist(strsplit(w, split = ' ', fixed = T))[1]
]
}
})
# first
microbenchmark({
dt[
, first_l := unlist(strsplit(w, split = ' ', fixed = T))[1]
, by = 1:nrow(dt)
]
})
# second
first_l_f <- function(sd)
{
strsplit(sd, split = ' ', fixed = T) %>%
do.call(rbind, .) %>%
`[`(,1)
}
dt[, first_l := NULL]
microbenchmark({
dt[
, first_l := .(first_l_f(w))
]
})
# third
first_l_f2 <- function(sd)
{
strsplit(sd, split = ' ', fixed = T) %>%
unlist %>%
matrix(nrow = 3) %>%
`[`(1,)
}
dt[, first_l := NULL]
microbenchmark({
dt[
, first_l := .(first_l_f2(w))
]
})
# fourth
rown <- 100000
words <-
sapply(
seq_len(rown)
, function(x){
nwords <- rbinom(1, 10, 0.5)
paste(
sapply(
seq_len(nwords)
, function(x){
paste(sample(letters, rbinom(1, 10, 0.5), replace = T), collapse = '')
}
)
, collapse = ' '
)
}
)
dt <-
data.table(
w = words
, a = sample(letters, rown, replace = T)
, b = runif(rown, -3, 3)
, c = runif(rown, -3, 3)
, e = rnorm(rown)
) %>%
.[, d := 1 + b + c + rnorm(nrow(.))]
first_l_f3 <- function(sd, n)
{
l <- strsplit(sd, split = ' ', fixed = T)
maxl <- max(lengths(l))
sapply(l, "length<-", maxl) %>%
`[`(n,) %>%
as.character
}
microbenchmark({
dt[
, (paste0('w_', 1:3)) := lapply(1:3, function(x) first_l_f3(w, x))
]
})
dt[
, (paste0('w_', 1:3)) := lapply(1:3, function(x) first_l_f3(w, x))
]
# chaining
res1 <- dt[a == 'a'][sample(.N, 100)]
res2 <- dt[, .N, a][, N]
res3 <- dt[, coefficients(lm(e ~ d))[1], a][, .(letter = a, coef = V1)]
# piping
samplpe_b <- dt[a %in% head(letters), sample(b, 1)]
res4 <-
dt %>%
.[a %in% head(letters)] %>%
.[,
{
dt0 <- .SD[1:100]
quants <-
dt0[, c] %>%
quantile(seq(0.1, 1, 0.1), na.rm = T)
.(q = quants)
}
, .(cond = b > samplpe_b)
] %>%
glm(
cond ~ q -1
, family = binomial(link = "logit")
, data = .
) %>%
summary %>%
.[[12]]
# function
rm(lm_preds)
lm_preds <- function(
sd, by, n
)
{
if(
n < 100 |
!by[['a']] %in% head(letters, 4)
)
{
res <-
list(
low = NA
, mean = NA
, high = NA
, coefs = NA
)
} else {
lmm <-
lm(
d ~ c + b
, data = sd
)
preds <-
stats::predict.lm(
lmm
, sd
, interval = "prediction"
)
res <-
list(
low = preds[, 2]
, mean = preds[, 1]
, high = preds[, 3]
, coefs = coefficients(lmm)
)
}
res
}
res5 <-
dt %>%
.[e < 0] %>%
.[.[, .I[b > 0]]] %>%
.[, `:=` (
low = as.numeric(lm_preds(.SD, .BY, .N)[[1]])
, mean = as.numeric(lm_preds(.SD, .BY, .N)[[2]])
, high = as.numeric(lm_preds(.SD, .BY, .N)[[3]])
, coef_c = as.numeric(lm_preds(.SD, .BY, .N)[[4]][1])
, coef_b = as.numeric(lm_preds(.SD, .BY, .N)[[4]][2])
, coef_int = as.numeric(lm_preds(.SD, .BY, .N)[[4]][3])
)
, a
] %>%
.[!is.na(mean), -'e', with = F]
# plot
plo <-
res5 %>%
ggplot +
facet_wrap(~ a) +
geom_ribbon(
aes(
x = c * coef_c + b * coef_b + coef_int
, ymin = low
, ymax = high
, fill = a
)
, size = 0.1
, alpha = 0.1
) +
geom_point(
aes(
x = c * coef_c + b * coef_b + coef_int
, y = mean
, color = a
)
, size = 1
) +
geom_point(
aes(
x = c * coef_c + b * coef_b + coef_int
, y = d
)
, size = 1
, color = 'black'
) +
theme_minimal()
print(plo)
เจธเจฐเฉเจค: www.habr.com
