2013-04-11 35 views
6

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

+3

tức là thử 'mâu thuẫn (chi tiết = TRUE)' –

Trả lời

7

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

+0

Cảm ơn Michele rất nhiều. Đây chính xác là những gì tôi cần. – Vara

6

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 
6

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 
+0

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

Các vấn đề liên quan