簡體   English   中英

創建 package 時的 R 環境問題

[英]R environment issues when creating a package

假設我有一個初始化新環境的 function:

init <-function()
{
    e <- new.env()
}

此外, init function 存在於 another.R 文件中

然后,在它初始化之后,我想開始在不同文件中的其他 function 調用中使用它,例如

init.main <- function(e)
{
    e$data <- list()
    e$number <- 0
}

但是,這會拋出一個錯誤,說 object e is not found。 我認為這是因為e僅在本地初始化,但如果我要使用僅依賴 function 調用的 package,我將如何讓函數能夠相互通信並使用相同的環境?

這是一種方法。

init <- local({
  e <- NULL
  function() {
    e <<- new.env(parent = emptyenv())
  }
})
init.main <- function() {
  e <- get("e", envir = environment(init))
}

這實際上取決於您是只想要一個e還是希望能夠擁有具有不同內容的多個環境。

在第一種情況下,只需在 package 的頂層定義e ,並讓您的init function 修改該副本。 例如,

e <- new.env()
init <- function() {
  e <<- new.env()
}

然后您的 package 中的任何其他 function 都可以看到e並使用它。 調用init()將清除所有以前的內容並將其設置為空。

另一種情況要困難一些,因為您需要處理幾個具有相同名稱的函數,這些函數引用不同的e值。 R 附帶的 R 簡介手冊的第 10.7 節中有一個示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM