gpt4 book ai didi

r - 如果包已经加载,那么在函数中需要一个包有什么影响?

转载 作者:行者123 更新时间:2023-12-03 22:31:47 25 4
gpt4 key购买 nike

包含 library 是否有任何不利影响?/require函数内部的语句会被非常频繁地调用吗?

使用的时间似乎可以忽略不计,但我每隔几分钟就调用一次函数,我想知道重复 require 是否有任何缺点电话?
请注意,该功能只是个人实用程序,不会被共享。即,我是唯一使用它的人

顺便说一句,任何关于为什么 library 的见解是 require 的一半慢?我的印象是它们是同义词。

  WithREQUIRE <- function(x) {
require(stringr)
str_detect(x, "hello")
}

WithLIBRARY <- function(x) {
library(stringr)
str_detect(x, "hello")
}

Without <- function(x) {
str_detect(x, "hello")
}

x <- "goodbye"

library(rbenchmark)
benchmark(WithREQUIRE(x), WithLIBRARY(X), Without(x), replications=1e3, order="relative")

# test replications elapsed relative user.self sys.self
# Without(x) 1000 0.592 1.000 0.262 0.006
# WithREQUIRE(x) 1000 0.650 1.098 0.295 0.015
# WithLIBRARY(X) 1000 1.359 2.296 0.572 0.024

最佳答案

require检查包是否已经加载(在搜索路径上)

使用

loaded <- paste("package", package, sep = ":") %in% search()

并且只有在 FALSE 时才会继续加载它
library包括一个类似的测试,但做的更多 stuff当这是 TRUE 时(包括创建可用包的列表。
require继续使用 tryCatch调用库并将创建一条消息。

因此,只需调用 libraryrequire当包不在搜索路径上时可能会导致 library更快
system.time(require(ggplot2))
## Loading required package: ggplot2
## user system elapsed
## 0.08 0.00 0.47
detach(package:ggplot2)
system.time(library(ggplot2))
## user system elapsed
## 0.06 0.01 0.08

但是,如果包已经加载,那么如您所见, require更快,因为它只检查包是否已加载。

最好的解决方案是创建一个导入 stringr 的小包。 (或至少 str_extract 来自 stringr

关于r - 如果包已经加载,那么在函数中需要一个包有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15258398/

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