簡體   English   中英

在函數中加載包的目的是什么?

[英]What is the purpose of loading a package in a function?

我開始嘗試查找library()require()之間的區別,並且在這里找到了一篇很好地解釋它的帖子: require()和library()之間有什么區別?

在這篇文章中,他們討論了如何在腳本頂部的函數和library()中使用require() 這提出了我的問題:在函數中而不是在腳本頂部加載包的目的是什么? 這樣做有什么好處?

謝謝!

為了進一步詳細說明@alistaire的注釋,我認為重要的部分是在可能的地方使用::表示法(很抱歉使這個答案,但是,我想使用一些不適合注釋的代碼)。 總體思路是保持NAMESPACE盡可能整潔,僅在需要時調用特定功能,即臨時使用它們,並且不要在當前會話中永久加載它們。 當然,它們仍然需要安裝在系統上才能加載它們。 臨時加載避免了沖突或其他副作用,例如,當兩個不同的程序包對功能使用相同的名稱但執行不同的操作時。

為了說明有關命名空間的問題,您可以檢查以下代碼,您需要安裝庫stringi ,我僅以它為例。 我希望這有幫助。

# load a library and check if its loaded
library(stringi)
names(sessionInfo()$otherPkgs)
# [1] "stringi"
# detach it
detach("package:stringi", unload = TRUE)
names(sessionInfo()$otherPkgs)
# NULL

# use library with :: notation, e.g., within function
my_fun <- function(x) {
  stringi::stri_replace_all_fixed(x, "a", "b")
}
my_fun("aaa")
# [1] "bbb"

# check if library is loaded
names(sessionInfo()$otherPkgs)
# NULL -> it is not loaded, hence, the namespace is kept clean

暫無
暫無

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

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