当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R taskCallback 添加或删除顶级任务回调


R语言 taskCallback 位于 base 包(package)。

说明

addTaskCallback 注册一个 R 函数,每次完成顶级任务时都会调用该函数。

removeTaskCallback un-registers 是之前通过 addTaskCallback 注册的函数。

这些提供了对用于管理task-completion操作的内部/本机机制的低级访问。一个可以用taskCallbackManagerR- 管理语言级别R每个任务完成时调用的函数。这样更容易、更直接。

用法

addTaskCallback(f, data = NULL, name = character())
removeTaskCallback(id)

参数

f

每次成功完成顶级任务时要调用的函数。分别使用 5 个或 4 个参数调用,具体取决于是否指定 data。返回值应该是一个逻辑值,指示是将回调保留在活动回调列表中还是丢弃它。

data

如果指定,这是回调函数 f 调用中的第 5 个参数。

id

一个字符串或一个整数,标识内部回调列表中要删除的元素。整数索引从 1 开始,即第一个元素为 1。当前注册的处理程序的名称可使用 getTaskCallbackNames 获得,并且也会在对 addTaskCallback 的调用中返回。

name

字符:要使用的名称。

细节

顶级任务是单独的表达式而不是整行输入。因此,expression1 ; expression2 形式的输入行将产生 2 个顶级任务。

调用顶级任务回调,其中包含顶级任务的表达式、顶级任务的结果、指示是否成功完成的逻辑值(当前始终为 TRUE)以及指示是否打印结果。如果在对 addTaskCallback 的调用中指定了 data 参数,则该值将作为第五个参数给出。

回调函数应该返回一个逻辑值。如果该值为 FALSE,则回调将从任务列表中删除,并且不会通过此机制再次调用。如果该函数返回 TRUE,则它将保留在列表中,并将在完成下一个顶级任务时调用。

addTaskCallback 返回一个整数值,给出此新回调在任务回调列表中占据的位置。这只是回调的当前位置。只要没有首先从列表中较早位置删除其他值,它就可以用于删除条目。

removeTaskCallback 返回一个逻辑值,指示指定元素是否已被删除。如果给出的名称或索引与列表中元素的名称或位置不对应,则此操作可能会失败(即返回 FALSE )。

注意

还有 C-level 访问顶级任务回调,以允许使用 C 例程而不是 R 函数。

例子

times <- function(total = 3, str = "Task a") {
  ctr <- 0
  function(expr, value, ok, visible) {
    ctr <<- ctr + 1
    cat(str, ctr, "\n")
    keep.me <- (ctr < total)
    if (!keep.me)
      cat("handler removing itself\n")

    # return
    keep.me
  }
}

# add the callback that will work for
# 4 top-level tasks and then remove itself.
n <- addTaskCallback(times(4))

# now remove it, assuming it is still first in the list.
removeTaskCallback(n)

## See how the handler is called every time till "self destruction":

addTaskCallback(times(4)) # counts as once already

sum(1:10) ; mean(1:3) # two more
sinpi(1)              # 4th - and "done"
cospi(1)
tanpi(1)

也可以看看

getTaskCallbackNames taskCallbackManager https://developer.r-project.org/TaskHandlers.pdf

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Add or Remove a Top-Level Task Callback。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。