當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。