рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдХреИрд╕реЗ рдмрдЪрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИред
datain <- data.frame(
chrom = c("chr17", "chr4", "chr5", "chr13"),
map = c(81061047, 106061533, 40102442, 73791553),
rs = c("rs75954926", "rs7679673", "rs7708610", "rs78341008"),
start = c(79061048, 104061534, 38102443, 71791554),
end = c(83061048, 108061534, 42102443, 75791554)
)
datain
datain$chr<-datain$chrom
setDT(datain)
setkey(datain, chr, start, end)
datain
рдзрдиреНрдпрд╡рд╛рдж!
рдПрд▓реЗрдХреНрд╕
рдореИрдВ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬ 10 рдФрд░ рдореИрдХрдУрдПрд╕ 10.13.6 рджреЛрдиреЛрдВ рдкрд░ рдбреЗрдЯрд╛.рдЯреЗрдмрд▓ 1.12.0 рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЕрдкрдиреЗ macOS рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдбреЗрдЯрд╛.рдЯреЗрдмрд▓ 1.12.2 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВред
рдХреБрдЫ рд╣рдж рддрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
> set.seed(1)
> d <- data.frame(x = paste0("chr",sample(17)[3:6]), y = 1:4)
> d$x2 <- d$x
> d
x y x2
1 chr9 1 chr9
2 chr13 2 chr13
3 chr3 3 chr3
4 chr11 4 chr11
> setDT(d)
> setkey(d,x2,y)
> d
x y x2
1: chr9 4 chr9
2: chr13 2 chr13
3: chr3 3 chr3
4: chr11 1 chr11
рдпрд╣ рддрдм рднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдХреБрдВрдЬреА рдХреЛ рд╕реАрдзреЗ setDT
рд╕рд╛рде рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ setDT
рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП setkeyv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ):
> set.seed(1)
> d <- data.frame(x = paste0("chr",sample(17)[3:6]), y = 1:4)
> d$x2 <- d$x
> d
x y x2
1 chr9 1 chr9
2 chr13 2 chr13
3 chr3 3 chr3
4 chr11 4 chr11
> setDT(d, key = c("x2","y"))
> d
x y x2
1: chr9 4 chr9
2: chr13 2 chr13
3: chr3 3 chr3
4: chr11 1 chr11
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ y
рдХрд╛ рдХреНрд░рдо рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рд╕реНрддрдВрднреЛрдВ рдХрд╛ рдХреНрд░рдо рдирд╣реАрдВ рд╣реИред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдпрд╣ рддрднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдХреЙрд▓рдо рдХреЛ data.frame рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ setDT
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ setkey
ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рдВрдЪ рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рд╕рднреА рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ:
1) рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдХреЙрд▓рдо рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛рдирд╛
> set.seed(1)
> d <- data.frame(x = paste0("chr",sample(17)[3:6]), y = 1:4)
> d
x y
1 chr9 1
2 chr13 2
3 chr3 3
4 chr11 4
> setDT(d)
> setkey(d,x)
> d
x y
1: chr11 4
2: chr13 2
3: chr3 3
4: chr9 1
2) рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рдирдпрд╛ рдХреЙрд▓рдо рдмрдирд╛рдирд╛
> set.seed(1)
> d <- data.frame(x = paste0("chr",sample(17)[3:6]), y = 1:4)
> set.seed(1)
> d$x2 <- paste0("chr",sample(17)[1:4])
> d
x y x2
1 chr9 1 chr5
2 chr13 2 chr6
3 chr3 3 chr9
4 chr11 4 chr13
> setDT(d)
> setkey(d,x2,y)
> d
x y x2
1: chr11 4 chr13
2: chr9 1 chr5
3: chr13 2 chr6
4: chr3 3 chr9
3) рдореМрдЬреВрджрд╛ рдХреЙрд▓рдо рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдХрд░ рдФрд░ рдЙрд╕рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдЪрд░реНрд╕ рдЪрд┐рдкрдХрд╛рдХрд░ рдПрдХ рдирдпрд╛ рдХреЙрд▓рдо рдмрдирд╛рдирд╛
> set.seed(1)
> d <- data.frame(x = paste0("chr",sample(17)[3:6]), y = 1:4)
> set.seed(1)
> d$x2 <- paste0("new_",sample(d$x,4))
> d
x y x2
1 chr9 1 new_chr13
2 chr13 2 new_chr11
3 chr3 3 new_chr3
4 chr11 4 new_chr9
> setDT(d)
> setkey(d,x2,y)
> d
x y x2
1: chr13 2 new_chr11
2: chr9 1 new_chr13
3: chr3 3 new_chr3
4: chr11 4 new_chr9
4) рд╕рд┐рд░реНрдл рдореМрдЬреВрджрд╛ рдХреЙрд▓рдо рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдХрд░ рдПрдХ рдирдпрд╛ рдХреЙрд▓рдо рдмрдирд╛рдирд╛
> set.seed(1)
> d <- data.frame(x = paste0("chr",sample(17)[3:6]), y = 1:4)
> set.seed(1)
> d$x2 <- sample(d$x,4)
> d
x y x2
1 chr9 1 chr13
2 chr13 2 chr11
3 chr3 3 chr3
4 chr11 4 chr9
> setDT(d)
> setkey(d,x2,y)
> d
x y x2
1: chr13 2 chr11
2: chr9 1 chr13
3: chr3 3 chr3
4: chr11 4 chr9
5) рдПрдХ рдХреЙрд▓рдо рдХреЛ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ред рддрд╛рд▓рд┐рдХрд╛ рддрд░реАрдХрд╛
> set.seed(1)
> d <- data.frame(x = paste0("chr",sample(17)[3:6]), y = 1:4)
> d
x y
1 chr9 1
2 chr13 2
3 chr3 3
4 chr11 4
> setDT(d)
> d[, x2 := x][]
x y x2
1: chr9 1 chr9
2: chr13 2 chr13
3: chr3 3 chr3
4: chr11 4 chr11
> setkey(d,x2,y)
> d
x y x2
1: chr11 4 chr11
2: chr13 2 chr13
3: chr3 3 chr3
4: chr9 1 chr9
рдпрджреНрдпрдкрд┐ рдпрд╣ рдмрдЧ рдПрдХ (рдмрд╣реБрдд) рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдХрдИ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ setkey
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓рд╛ рдореЗрд░реЗ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
@jaapwalhout рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ (data.table_1.12.3 рдХреЗ рд╕рд╛рде)ред
рд╕рд╛рде рд╣реА, (i) рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдХрд╛рд░рдХреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ (рд╡рд░реНрдг рдпрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рднреА рд╣реЛрддрд╛ рд╣реИ), (ii) рдХреБрдВрдЬреА (x рдпрд╛ y) рдЬреЛ рдХреБрдЫ рднреА рд╣реЛрддрд╛ рд╣реИред
рдиреАрдЪреЗ, рдПрдХ рд╕рд░рд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдгред
рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВред
options(datatable.verbose = TRUE)
## KO
d <- data.frame(x = c(9, 1), y = c(9, 1))
d$x2 <- d$x
d
# x y x2
# 1 9 9 9
# 2 1 1 1
setDT(d, key = "x")[]
# forder took 0 sec
# reorder took 0 sec
# x y x2
# 1: 9 1 9
# 2: 1 9 1
## KO
d <- data.frame(x = c("9", "1"), y = c(9, 1), stringsAsFactors = FALSE)
d$x2 <- d$x
d
# x y x2
# 1 9 9 9
# 2 1 1 1
setDT(d, key = "x")[]
# forder took 0 sec
# reorder took 0 sec
# x y x2
# 1: 9 1 9
# 2: 1 9 1
## OK (with warning)
d <- data.frame(x = c("9", "1"), y = c(9, 1))
setDT(d)
d$x2 <- d$x
# Assigning to all 2 rows
# RHS for item 1 has been duplicated because NAMED is 2, but then is being plonked. length(values)==2; length(cols)==1)
setkey(d, y, verbose = TRUE)[]
# forder took 0 sec
# reorder took 0 sec
# x y x2
# 1: 1 1 1
# 2: 9 9 9
iiuc, рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрд╢реЛрдзрди рдХреЗ рдХреЙрд▓рдо рдпрд╛ рд╕реВрдЪреА рддрддреНрд╡ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рддреЗ рд╕рдордп, рд╕реНрдореГрддрд┐ рдкрддрд╛ рд╡рд╣реА рд╣реЛрдЧрд╛ рдФрд░ рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ "рдЪреАрдЬреЗрдВ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рдПрдВрдЧреА"ред
copy()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
# KO
l <- list(x = c(9, 1), y = c(9, 1))
l[["z"]] <- l[["x"]]
l
setDT(l, key = "x")[]
address(l$x) == address(l$z)
# TRUE
# OK
l <- list(x = c(9, 1), y = c(9, 1))
l[["z"]] <- copy(l[["x"]])
l
setDT(l, key = "x")[]
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
iiuc, рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрд╢реЛрдзрди рдХреЗ рдХреЙрд▓рдо рдпрд╛ рд╕реВрдЪреА рддрддреНрд╡ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рддреЗ рд╕рдордп, рд╕реНрдореГрддрд┐ рдкрддрд╛ рд╡рд╣реА рд╣реЛрдЧрд╛ рдФрд░ рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ "рдЪреАрдЬреЗрдВ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЬрд╛рдПрдВрдЧреА"ред
copy()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред