Làm việc với tệp
Thuộc phần Lập trình hướng đối tượng trong hành trình R của Coddy. Bài học 1 trên 57.
Các chương trình thực tế được chia thành nhiều tệp. Trong R, source("Greeting.R") chạy một tệp khác từ đầu đến cuối, rồi bạn có thể dùng mọi hàm được định nghĩa trong tệp đó:
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")Chạy main.R sẽ in ra Hello, Ada!: dòng source() tải greeting() trước khi main.R gọi hàm này.
Chương trình bắt đầu trong tệp bạn chạy, ở đây là main.R, và R đọc tệp đó từng dòng một. Thứ tự rất quan trọng: hàm chỉ tồn tại sau khi tệp định nghĩa hàm đó được nạp, vì vậy các dòng source() nằm ở đầu tệp:
# main.R
cat(greeting("Ada"), "\n") # Lỗi: không tìm thấy hàm (function) "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n") # Chạy được: greeting() giờ đã tồn tạiBố cục thường dùng là mỗi tệp chứa một lớp và được đặt tên theo lớp đó: Account.R chứa hàm khởi tạo account và các phương thức của nó, Shape.R chứa các hàm tổng quát shape. Trong các thử thách của phần này, bạn viết code vào những tệp đó, còn main.R chứa code đầu vào/đầu ra đã được cung cấp, với các dòng source() đã nằm ở đầu tệp theo đúng thứ tự. Trình chỉnh sửa hiển thị mỗi tệp dưới dạng một thẻ.
Shape.R # Các hàm tổng quát dùng chung cho mọi hình: nạp tệp này trước
Circle.R # Lớp hình tròn và các phương thức của lớp
main.R # source("Shape.R"); source("Circle.R"); đọc đầu vào, in ra kết quảsource() chạy một tệp trong môi trường toàn cục, vì vậy các hàm và biến trong đó trở thành tên toàn cục. R không có tên riêng tư theo tệp: nếu hai tệp định nghĩa helper(), tệp được source sau cùng sẽ thắng. Một giá trị nằm riêng trên một dòng trong tệp được source cũng không được in ra, vì vậy các tệp cần hiển thị nội dung nào đó sẽ gọi cat():
# Tools.R
total <- 0 # biến toàn cục sau khi nạp tệp
42 # source() không in ra
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # nạp tệp sau: thay thế helper ở trênThử thách
DễChương trình có hai tệp. main.R nạp Greeting.R, đọc tên và in ra kết quả của greeting(name) cho từng tên. Hoàn thiện greeting() trong Greeting.R để hàm trả về Hello, Ada! cho tên Ada, hoặc Hello, friend! khi tên trống.
Đặt code của bạn trong Greeting.R. main.R chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.
Tự làm thử
source("Greeting.R")
# Đoạn code đầu vào/đầu ra đã có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Kiến thức cơ bản về S3
Làm việc với tệpDanh sách với một lớpHàm khởi tạoPhương thức in ra và định dạngTrình xác thực và hàm hỗ trợÔn tập: nhiệt độ4Tính đóng gói trong R
Closure dưới dạng đối tượngMôi trường dưới dạng đối tượngHàm truy cậpBảo vệ trạng tháiÔn tập: đồng hồ tính phí đỗ xe2S3, hàm generic và phương thức
Hàm generic và UseMethodPhương thức mặc địnhPhương thức cho hàm generic cơ sởCơ bản về NextMethodÔn tập: diện tích hình5Các lớp S4
Định nghĩa lớp S4Slot và quyền truy cậpKiểm tra tính hợp lệPhương thức showÔn tập: Danh mục sản phẩmTự luyện tập: Trình biên dịch R online