Sao tôi không đọc nổi code của bạn?

Nhập môn viết hàm trong R

Richie Cotton

Data Evangelist at DataCamp

Động từ dplyr

select() chọn cột

filter() lọc hàng

Nhập môn viết hàm trong R

Tên hàm nên chứa động từ

  • get
  • calculate (hoặc chỉ calc)
  • run
  • process
  • import
  • clean
  • tidy
  • draw
Nhập môn viết hàm trong R

lm() được đặt tên chưa tốt

  • Từ viết tắt không tự giải thích
  • Không chứa động từ
  • Có rất nhiều mô hình tuyến tính

Tên tốt hơn là run_linear_regression()

Nhập môn viết hàm trong R

Dễ đọc vs. dễ gõ

  • Hiểu code >> gõ code
Nhập môn viết hàm trong R

Dễ đọc vs. dễ gõ

  • Hiểu code >> gõ code
  • Trình soạn thảo có tự động hoàn thành

Tự động hoàn thành trong DataCamp

Nhập môn viết hàm trong R

Dễ đọc vs. dễ gõ

  • Hiểu code >> gõ code
  • Trình soạn thảo có tự động hoàn thành
  • Có thể đặt bí danh cho hàm hay dùng
h <- head
data(cats, package = "MASS")
h(cats)
  Sex Bwt Hwt
1   F 2.0 7.0
2   F 2.0 7.4
3   F 2.0 9.5
4   F 2.1 7.2
5   F 2.1 7.3
6   F 2.1 7.6
Nhập môn viết hàm trong R

Tham số của lm()

args(lm)
function (formula, data, subset, weights, na.action, method = "qr", 
    model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, 
    contrasts = NULL, offset, ...)
Nhập môn viết hàm trong R

Các loại tham số

  • Tham số dữ liệu: tính trên cái gì
  • Tham số chi tiết: tính như thế nào
args(cor)
function (x, y = NULL, use = "everything", 
  method = c("pearson", "kendall", "spearman"))
Nhập môn viết hàm trong R

Tham số dữ liệu nên đứng trước tham số chi tiết

Đoạn này sẽ không chạy

data %>%
  lm(formula)

vì tham số dữ liệu không đứng đầu.

Nhập môn viết hàm trong R

Hàm hồi quy tuyến tính đã chỉnh sửa

run_linear_regression <- function(data, formula) {
  lm(formula, data)
}
cats %>% 
  run_linear_regression(Hwt ~ Bet + Sex)
Call:
lm(formula = formula, data = data)

Coefficients:
(Intercept)          Bwt         SexM  
    -0.4150       4.0758      -0.0821
Nhập môn viết hàm trong R

Ayo berlatih!

Nhập môn viết hàm trong R

Preparing Video For Download...