Có bất kỳ tác động bất lợi nào để bao gồm các tuyên bố library
/require
bên trong các chức năng sẽ được gọi rất thường xuyên không?Whats tác động của việc yêu cầu một gói bên trong một hàm nếu gói đó đã được nạp?
Thời gian sử dụng có vẻ khá cẩu thả, nhưng tôi gọi chức năng vài phút một lần và tôi tự hỏi liệu có bất kỳ nhược điểm nào đối với các cuộc gọi lặp lại require
không?
lưu ý rằng chức năng này chỉ là một ứng dụng cá nhân và không được chia sẻ. tức là, tôi là người duy nhất sử dụng nó
Ngẫu nhiên, bất kỳ thông tin chi tiết nào về lý do tại sao library
là một nửa chậm như require
? Tôi đã được ấn tượng rằng họ đã đồng nghĩa.
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
nếu bạn là người duy nhất sử dụng nó, Tại sao không để loại bỏ yêu cầu/thư viện và gọi nó là ngoài chức năng? taht đã nói, bên trong một hàm tôi sẽ sử dụng 'require' vì nó trả về một cảnh báo không phải là lỗi. – agstudy
Liệu sự khác biệt tốc độ có liên quan đến' thư viện' không trả về danh sách các gói có sẵn trong khi 'require' chỉ trả về giá trị hợp lý' TRUE/FALSE'? Tôi chỉ đọc trong thư viện ', nhưng không có chuyên gia về chủ đề này. – thelatemail
Thực hành không tốt là sử dụng' library() 'hoặc' require() 'bên trong một hàm, bởi vì nó khó mà nói được những gì gói mã nhu cầu.Họ nên hoặc là ou tside hoặc trong gói DESCRIPTION. Tôi sẽ không lo lắng quá nhiều về các hàm ý hiệu suất (và nếu bạn đã làm 'microbenchmark' cho bạn dữ liệu tốt hơn để tiếp tục). – hadley