Gần đây tôi đã phát hiện ra rằng có thể gây ra lỗi do xung đột giữa các gói, nghĩa là hai (hoặc nhiều) gói có thể có các hàm tương tự. Tôi biết rằng mã số search()
tạo danh sách các gói được đặt hàng theo cách R đọc chúng. Ngoài ra còn có mã args
cung cấp chức năng đọc bởi R.
Điều tôi muốn biết trước tiên là làm thế nào để phát hiện xem lỗi có được tạo ra do xung đột giữa các gói và thứ hai làm thế nào để tìm ra gói nào đang xung đột? Cuối cùng, sau khi các xung đột đã được phát hiện, làm thế nào chúng ta có thể buộc R sử dụng cụ thể chức năng từ một trong các gói?Phát hiện xung đột giữa các gói trong R
Trả lời
Như @ Paul nói, khi gắn (ví dụ như thông qua library
chức năng) một gói, bạn có thể nhận được:
> library("gdata", lib.loc="C:/Program Files/R/R-2.15.3/library")
gdata: read.xls support for 'XLS' (Excel 97-2004) files ENABLED.
gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.
Attaching package: ‘gdata’
The following object(s) are masked from ‘package:stats’:
nobs
The following object(s) are masked from ‘package:utils’:
object.size
Khi bạn nhận được "Các đối tượng sau đây được đeo mặt nạ" có nghĩa là các cuộc gọi đến các chức năng đó sẽ được R coi là cuộc gọi đến các chức năng trong gói mới, trong ví dụ gdata
của tôi.
Bạn có thể tránh điều này qua:
> nobs
function (object, ...)
UseMethod("nobs")
<environment: namespace:gdata>
> stats::nobs
function (object, ...)
UseMethod("nobs")
<bytecode: 0x0000000008a92790>
<environment: namespace:stats
hy vọng rằng sẽ giúp
Cảm ơn Michele rất nhiều. Đây chính xác là những gì tôi cần. – Vara
Nếu R tải gói mới, gói này sẽ tạo cảnh báo nếu gói mới chứa bất kỳ chức năng nào đã có trong môi trường làm việc. Vì vậy, nếu bạn chú ý trong quá trình tải gói, bạn có thể xem có bất kỳ xung đột nào không. Khi có xung đột, bạn có thể buộc R để sử dụng chức năng từ một gói phần mềm đặc biệt như thế này:
package_name::function_name
Tôi nghĩ rằng bạn đang tìm kiếm getAnywhere
mà sẽ cho bạn biết tất cả các nơi đối số của nó tồn tại. Ví dụ. (trong bộ tải hiện tại của tôi):
Rgames> getAnywhere(logit)
2 differing objects matching ‘logit’ were found
in the following places
package:boot
package:pracma
namespace:boot
namespace:pracma
Use [] to view one of them
Cảm ơn câu trả lời Carl, tôi không biết về mã này. Tuy nhiên, tôi nghĩ rằng nó hữu ích khi bạn biết trước chính xác lập luận xung đột nào. – Vara
tức là thử 'mâu thuẫn (chi tiết = TRUE)' –