假设我的进程依赖于两个带一个输出的输入。该过程已经在其他地方进行了数值模拟,再次运行这些模拟是不切实际的。
我已将数据存储在表格中。该表包含(除其他外)两个关键输入参数和结果输出参数(分别为v,q和quant)。
> v=0.01*rep(1:100, each=100)
> q=0.01*rep(seq(1:100),100)
> quant <- rnorm(10000, mean=0.5, sd=0.1)
> fd <- data.table(q,v, quant)
我的问题:输入参数空间被其中一个输入(此处为v)的离散值细分,我想知道如何提取我的表的子集,其中第二个输入(q)的值产生输出的某个极值(比如最接近特定值alpha,使得我们在另一个输入的子集内寻找min(abs(quant-alpha)))保持不变。例如,假设alpha = 0.5
fd1 <- subset(fd,???min(abs(quant-0.5)),by=v)
因此,结果表将具有唯一的v值和quant值,满足指定alpha和v的min(abs(quant-alpha))。该表还必须包含q的相关值以及包含的任何其他数据。这一行。
我相信对于这个问题应该有一个非常简单的解决方案,而且我只是太新手了解如何找到它!
答案 0 :(得分:2)
你只是想这样做......
fd[ , .SD[ which.min( abs(quant-0.5) ) ] , by = v ]
# v q quant
# 1: 0.01 0.42 0.5010319
# 2: 0.02 0.71 0.4983129
# 3: 0.03 0.47 0.4996793
# 4: 0.04 0.01 0.5028813
# 5: 0.05 0.93 0.5009666
# 6: 0.06 0.93 0.4996367
使用by = v
到子集which.min
,您可以获得满足条件的每个组(.SD
)的行。