gpt4 book ai didi

r - 如何在我自己的包中使用 data.table::setDTthreads()?

转载 作者:行者123 更新时间:2023-12-04 07:27:20 25 4
gpt4 key购买 nike

我是第一次开发非常小的包(并且 - 也许这在我的问题中很重要 - 想在 CRAN 上发布它)。这个包使用来自 data.table 和 base R 的函数。我想利用 data.table::setDTthreads() 函数提供的并行计算的好处。
当用户加载 data.table 包时,这个函数会立即调用,但我在开发包时没有这样做。我现在所做的只是:(1)在描述文件中,我已将 data.table 添加到导入字段; (2) 在 NAMESPACE 中我包含了 import(data.table)。
据我所知,这与 library(data.table) 不同,我不想要这个,因为我不想在用户加载我的包时加载 data.table。但我仍然想使用 data.table::setDTthreads() 函数。我应该在我的脚本中的哪里包含它?或者也许我正在使用它,因为我在 NAMESPACE 中包含了 import(data.table)?
我的包在 R/目录中只包含一个 .R 文件,功能很少,但只会导出一个对用户可见(所以其他的只是辅助函数)。让我们说,它看起来像这样:

#' roxygen2 skeleton
main_function <- function(x) {
x <- helper_function_1(x)
x
}

helper_function_1 <- function(x) {
x
}
我真正担心的是,当我在我的包中使用 data.table::setDTthreads() 时,它会对用户的环境产生影响,即我将启用并行计算并设置线程,而不仅仅是我的包中的函数,但是通常用于用户 session 。

最佳答案

很好的问题。
是的,它会影响用户环境中的所有 data.table 调用(包括来自其他包的调用),而不仅仅是来自您的包的调用。
一般建议不要在你的包中设置这个值,而是让用户知道他们可以自己设置它。如果你想在你的包中设置它,你应该很好地记录它。
请注意,50% 与 100% 通常是非常小的差异(可能小于 5%,甚至在共享环境中会变慢)所以我建议您衡量如果 yield 很小,是否真的值得搞乱用户环境.
例如检查这些时间
https://github.com/h2oai/db-benchmark/issues/202
您还可以填写功能请求,以便为单个包的调用设置线程数。通过检查调用的顶级环境在技术上是可能的。

关于r - 如何在我自己的包中使用 data.table::setDTthreads()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68142690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com