Experiment has_many :features
Feature belongs_to :experiment
Experiment.where("experiments.id=1")
.joins(:features)
.pluck("features.id", "experiments.id")
Run Code Online (Sandbox Code Playgroud)
我希望这能返回每个功能的ID和实验的ID.
[
[1, 1],
[2, 1],
[3, 1],
# ....
]
Run Code Online (Sandbox Code Playgroud)
相反,这将返回实验的id,然后返回nil
[
[1, nil],
[1, nil],
[1, nil],
# ....
]
Run Code Online (Sandbox Code Playgroud)
这有三个方面很奇怪:
这似乎是一个错误,但也许我做错了什么.有小费吗?
SQL输出:
SELECT features.id, experiments.id FROM "experiments" INNER JOIN "features" ON "features"."experiment_id" = "experiments"."id" WHERE (experiments.id=1)
Run Code Online (Sandbox Code Playgroud)
注意.这是一个与查询类似的简化问题:
Experiment.where("experiments.id=1")
.joins(feature: { child2: { :child3 } })
.pluck("feature.id, child3.id")
Run Code Online (Sandbox Code Playgroud) 我有一个花车向量.我想在各种范围内反复找到该向量的子集.我当前的语法(DT[x > 1.8 & x < 2.9])似乎是矢量扫描(它相对较慢).
是否有更快的语法利用二进制搜索基于范围/区间的data.tables子设置?
例:
set.seed(123L)
x = runif(1E6)
DT = data.table(x, key = "x")
# For foverlaps()
DT[,xtemp:=x]
range = data.table(start = 0.04, end = 0.5, key=c("start", "end"))
microbenchmark::microbenchmark(
DT[x < 0.5 & x > 0.04],
x[x < 0.5 & x > 0.04],
foverlaps(DT, range, by.x = c("x", "xtemp"))
)
Unit: milliseconds
expr min lq mean median uq max neval
DT[x < 0.5 & x > 0.04] 12.65391 16.10852 18.43412 17.23268 17.76868 104.1112 …Run Code Online (Sandbox Code Playgroud) 分配名称存储在字符向量中的列集很好地讨论,但我似乎无法找到检索列并对其进行操作的解决方案.
cols = c("x", "y")
DT = data.table(x = 10:15, y = 20:25)
> DT
x y
1: 10 20
2: 11 21
3: 12 22
4: 13 23
5: 14 24
6: 15 25
Run Code Online (Sandbox Code Playgroud)
期望的输出
> DT[,paste(x,y)]
[1] "10 20" "11 21" "12 22" "13 23" "14 24" "15 25"
Run Code Online (Sandbox Code Playgroud)
我的目标是根据列中的每列获取唯一标识符cols.我可以通过硬编码列名来做到这一点,但我宁愿参考cols
这是我尝试过的一些语法及其输出.
得到()
> DT[,get(cols)]
[1] 10 11 12 13 14 15
Run Code Online (Sandbox Code Playgroud)
括弧
> DT[,(cols)]
[1] "x" "y"
Run Code Online (Sandbox Code Playgroud)
名单
> DT[,as.list(cols)]
V1 V2
1: x y …Run Code Online (Sandbox Code Playgroud)