This question và cụ thể là this answer đưa ra câu hỏi sau: Làm thế nào tôi có thể nhận được cảnh báo về việc che dấu các phương thức trong R?Phương thức sao chép trong R
Nếu bạn chạy mã sau trong phiên R sạch, bạn sẽ nhận thấy rằng việc tải dplyr
thay đổi phương thức mặc định cho lag
.
lag(1:3, 1)
## [1] 1 2 3
## attr(,"tsp")
## [1] 0 2 1
require(dplyr)
lag(1:3, 1)
## [1] NA 1 2
Nếu bạn đính kèm các gói dplyr
, bạn sẽ có được warnigns cho một số đối tượng bịt mặt, nhưng không có cảnh báo về phương pháp mặc định cho lag
được đeo mặt nạ. Lý do là khi gọi lag
, chức năng chung từ gói stats
được gọi.
lag
## function (x, ...)
## UseMethod("lag")
## <bytecode: 0x000000000c072188>
## <environment: namespace:stats>
và methods(lag)
chỉ cho tôi biết rằng có phương pháp lag.default
. Tôi có thể thấy rằng có hai phương pháp sử dụng getAnywhere
:
getAnywhere(lag.default)
## 2 differing objects matching ‘lag.default’ were found
## in the following places
## registered S3 method for lag from namespace dplyr
## namespace:dplyr
## namespace:stats
## Use [] to view one of them
Nhưng điều này đòi hỏi mà tôi biết để kiểm tra xem phương pháp mặc định lag
được thay đổi bằng cách dplyr
. Có cách nào để kiểm tra xem các phương pháp có bị che khuất không? Có lẽ đó là một chức năng như thế này:
checkMethodMasking(dplyr)
## The following methods are masked from 'package:dplyr':
## lag.default
NB: Nó không phải là đủ để có được một cảnh báo khi tôi tải dplyr
với require(dplyr)
. Phương pháp này cũng bị quá tải nếu tôi chỉ tải không gian tên mà không đính kèm gói (ví dụ: tôi gọi dplyr::mutate
hoặc thậm chí tôi sử dụng chức năng từ gói khác gọi là dplyr
chức năng được nhập bằng cách sử dụng importFrom
).
FWIW dplyr không ghi đè lên phương thức đó trong phiên bản tiếp theo – hadley