2012-11-25 29 views
57

Làm cách nào để gọi các hàm được xác định trong tệp abc.R trong tệp khác, hãy nói xyz.R?Xác định tất cả các chức năng trong một tệp .R, gọi chúng từ một tệp .R khác. Làm thế nào, nếu có thể?

Câu hỏi bổ sung là, làm cách nào để gọi các hàm được xác định trong abc.R từ dấu nhắc lệnh/dòng lệnh R?

+4

Bằng cách sử dụng những chức năng này. Xem xét nghiêm túc hơn "nguồn" – Dason

Trả lời

88

Bạn có thể gọi source("abc.R") Tiếp theo source("xyz.R") (giả định rằng cả hai tập tin nằm trong thư mục làm việc hiện tại của bạn

Nếu abc.R là:.

fooABC <- function(x) { 
    k <- x+1 
    return(k) 
} 

và xyz.R là:

fooXYZ <- function(x) { 
    k <- fooABC(x)+1 
    return(k) 
} 

thì thao tác này sẽ hoạt động:

> source("abc.R") 
> source("xyz.R") 
> fooXYZ(3) 
[1] 5 
> 

Ngay cả khi có phụ thuộc chu kỳ, điều này sẽ hoạt động.

Ví dụ: Nếu abc.R là thế này:

fooABC <- function(x) { 
    k <- barXYZ(x)+1 
    return(k) 
} 

barABC <- function(x){ 
    k <- x+30 
    return(k) 
} 

và xyz.R là thế này:

fooXYZ <- function(x) { 
    k <- fooABC(x)+1 
    return(k) 
} 

barXYZ <- function(x){ 
    k <- barABC(x)+20 
    return(k) 
} 

sau đó,

> source("abc.R") 
> source("xyz.R") 
> fooXYZ(3) 
[1] 55 
> 
+7

Một sắc thái: bạn chỉ phải 'nguồn' một tệp/hàm một lần. Sau đó, nó nằm trong vùng làm việc của bạn và bạn có thể sử dụng nó bất cứ lúc nào. Nếu bạn thay đổi nó, bạn phải tái nguồn nó. Nếu các chức năng của bạn đang thay đổi rất nhiều kể từ khi bạn đang chuyển đổi mã, hãy đặt tất cả chúng trong một tệp và chỉ cần cung cấp toàn bộ nội dung mọi lúc. Bạn cũng có thể có một tệp nhỏ hơn riêng biệt 1. nguồn tập hợp các hàm lớn hơn và 2. Chạy các trường hợp thử nghiệm của bạn. Trong R có rất nhiều cách để sắp xếp dòng công việc của bạn. –

+4

Cảm ơn sắc thái, Bryan. Tôi đã chứng minh điều này là 2 kịch bản mà hầu hết mọi người từ các ngôn ngữ thủ tục có thể tự hỏi. Nó giống như các tập tin đã được chỉnh sửa để thêm phụ thuộc tuần hoàn, trong trường hợp đó chúng cần phải được cấp lại (như được hiển thị) và các chu kỳ không ảnh hưởng đến việc tìm nguồn cung ứng các tệp. –

+0

Cảm ơn cả hai bạn. @A_K: cảm ơn rất nhiều vì đã nêu bật vấn đề phụ thuộc theo chu kỳ. Đã lưu tôi một số giờ đào thông qua tài liệu R "có thể cải tiến" :) –