Flo*_*lli 2 optimization loops r
我需要为组中的每个成员赋予权重。我做了以下循环来创建weights_ind向量(个体权重的向量),但我的循环太慢(2000 个人 2 秒):
# Data example
n.group = 10
n.tot = 1000
groups = sample(1:10, n.tot, replace = TRUE)
weights_by_group = rexp(n.group, rate = 1)
weights_ind = rep(NA, n.tot)
for(i in 1:n.tot){
for(j in 1:n.group) {
if(groups[i] == j)
weights_ind[i] = weights_by_group[j]
}}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我可以使用哪个更快的功能?
由于组从 1 开始编号,因此您可以使用groups向量来索引weights_by_group向量。
weights_ind = weights_by_group[groups]
Run Code Online (Sandbox Code Playgroud)
在我的计算机上,对于 2000 个人,这大约需要 10 微秒。
如果您的组不是数字,您可以weights_by_group使用组标识符命名向量,并仍然使用groupsto 索引:
groups = sample(letters[1:n.group], n.tot, replace = TRUE)
weights_by_group = rexp(n.group, rate = 1)
names(weights_by_group) = letters[1:n.group]
weights_ind = weights_by_group[groups]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |