- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要并行化任务,我需要将大 data.table 拆分为大致相等的部分,
将通过列定义的组保持在一起,id
.认为:N
是数据的长度k
是 id
的不同值的数量M
是所需零件的数量
这个想法是 M << k << N,所以 split 为 id
不好。
library(data.table)
library(dplyr)
set.seed(1)
N <- 16 # in application N is very large
k <- 6 # in application k << N
dt <- data.table(id = sample(letters[1:k], N, replace=T), value=runif(N)) %>%
arrange(id)
t(dt$id)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16]
# [1,] "a" "b" "b" "b" "b" "c" "c" "c" "d" "d" "d" "e" "e" "f" "f" "f"
M=3
的所需拆分是
{{a,b}, {c,d}, {e,f}}
和
M=4
是
{{a,b}, {c}, {d,e}, {f}}
quantile(id, probs=seq(0, 1, length.out = M+1), type=1)
或一些类似的分割成大致相等的部分。
最佳答案
初步评论
我推荐阅读什么 the main author of data.table has to say关于与它的并行化。
我不知道你对data.table有多熟悉,但你可能忽略了它的by
争论...?从下面引用@eddi 的评论...
Instead of literally splitting up the data - create a new "parallel.id" column, and then call
dt[, parallel_operation(.SD), by = parallel.id]
by
ids <- names(sort(table(dt$id)))
n <- length(ids)
重新排列,以便我们在大 ID 和小 ID 之间交替,
following Arun's interleaving trick :
alt_ids <- c(ids, rev(ids))[order(c(1:n, 1:n))][1:n]
按顺序拆分 id,每个组中的 ID 数量大致相同(如
zero323's answer ):
gs <- split(alt_ids, ceiling(seq(n) / (n/M)))
res <- vector("list", M)
setkey(dt, id)
for (m in 1:M) res[[m]] <- dt[J(gs[[m]])]
# if using a data.frame, replace the last two lines with
# for (m in 1:M) res[[m]] <- dt[id %in% gs[[m]],]
检查尺寸是否太差:
# using the OP's example data...
sapply(res, nrow)
# [1] 7 9 for M = 2
# [1] 5 5 6 for M = 3
# [1] 1 6 3 6 for M = 4
# [1] 1 4 2 3 6 for M = 5
虽然我强调
data.table
在顶部,这应该适用于
data.frame
, 也。
关于r - 将 data.table 拆分为大致相等的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32125795/
我想从麦克风获取输入音频流,获取该流的频率增益并将该信息复制到另一个白噪声音频流。 目标是输入流中响亮的相同频率在输出(白噪声)流中也响亮。 这可能吗? 我可以想象使用分析器节点从输入中获取频率信息,
所以我只是想知道,由于我的研究没有结果,是否有任何免费可用的控件(最好是 WPF),即本质上是任何类型属性的“通用”控件? 例如,假设您正在提供一个所见即所得的表单构造函数,并且您希望支持多种值类型
我注意到 Gmail 开始“统计”搜索结果的数量,我想知道这是否只是一种美学上的改变,或者它是否真的节省了 CPU 周期。 在 Gmail 中执行搜索时,它会显示类似 的内容 Viewing 10 r
我正在尝试获取 CSV 文件,对其进行错误检查,然后打印错误消息。 mapM_ (appendFile filePath)(返回[字符串]的errorCheck函数) 这可行,但当我运行它时,但在很长
(大致)相当于 BlackBerry() 中的 setCurrent()? 我有一些 J2ME 代码正在移植到 BB RIM 类。 J2ME 代码使用 setCurrent() 在应用程序中“更改页面
我看到 Google Cloud 可能 terminate preemptible instances at any time ,但是否有任何非官方的独立研究报告显示“抢占率”(每小时抢占的虚拟机数量
示例:在链表上调用 cut 方法: f{1, 2, 3, 4, 5, 6, 7} 将返回链接列表: f{5,6, 7, 1, 2, 3, 4} LinkList Cut() 方法 public sta
我是一名优秀的程序员,十分优秀!