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


93

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, chẳng hạn như xyz.R?

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

Câu trả lời:


137

Bạn có thể gọi source("abc.R")theo sau là source("xyz.R")(giả sử rằng cả hai tệp này đều 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ì điều này sẽ hoạt động:

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

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

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

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

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

và xyz.R là:

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
>

9
Một sắc thái: bạn chỉ có sourcemột tệp / chức năng một lần. Sau đó, nó nằm trong không gian 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 thay đổi thì phải dẫn nguồn lại. Nếu các chức năng của bạn đang thay đổi nhiều vì bạn đang chuyển đổi mã, hãy đặt tất cả chúng vào một tệp và chỉ cần nguồn toàn bộ mọi thứ. Bạn cũng có thể có một tệp nhỏ hơn riêng biệt 1. tạo nguồn cho bộ sưu tậ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 để bạn sắp xếp công việc.
Bryan Hanson

5
Cảm ơn vì sắc thái, Bryan. Tôi đã chứng minh đây là 2 tình huống mà hầu hết mọi người từ các ngôn ngữ thủ tục có thể thắc mắc. Nó giống như thể các tệp đã được chỉnh sửa để thêm phụ thuộc theo chu kỳ, trong trường hợp đó, chúng cần được cung cấp nguồn lực (như hình minh họa) & các chu kỳ không ảnh hưởng đến nguồn cung cấp của tệp.
A_K

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ỳ. Cứu tôi một số giờ đào qua các tài liệu nghiên cứu "có thể-được-được cải thiện" :)
G Shah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.