[英]Joining data.tables within a function
我想通过在函数中进行连接来更改data.table。 我理解data.tables通过引用工作,因此假设将data.table的连接版本重新分配给自身将改变原始data.table。 我误解了什么简单的事情?
谢谢!
library('data.table')
# function to restrict DT to subset, by join
join_test <- function(DT) {
test_dt = data.table(a = c('a', 'b'), c = c('x', 'y'))
setkey(test_dt, 'a')
setkey(DT, 'a')
DT <- DT[test_dt]
}
DT = data.table(a = c("a","b","c"), b = 1:3)
print(DT)
# a b
# 1: a 1
# 2: b 2
# 3: c 3
haskey(DT)
# [1] FALSE
join_test(DT)
print(DT)
# a b
# 1: a 1
# 2: b 2
# 3: c 3
haskey(DT)
# [1] TRUE
(包括haskey调用只是为了仔细检查一些引用更改是否有效)
您可以通过引用来完成它(因为您可以根据连接的值通过引用连接和分配列,而无需实际保存连接的表)。 但是,您需要明确选择您所追求的列
join_test <- function(DT) {
test_dt = data.table(a = c('a', 'b'), c = c('x', 'y'))
DT[test_dt, c := c, on = 'a']
}
让函数返回数据表并将结果存储在DT中将获得您想要的结果。
join_test <- function(DT) {
test_dt = data.table(a = c('a', 'b'), c = c('x', 'y'))
setkey(test_dt, 'a')
setkey(DT, 'a')
DT <- DT[test_dt]
return(DT)
}
DT = data.table(a = c("a","b","c"), b = 1:3)
DT <- join_test(DT)
print(DT)
# a b c
# 1: a 1 x
# 2: b 2 y
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.