Khi tôi xem nguồn của R Packages, tôi thấy chức năng sweep
được sử dụng khá thường xuyên. Đôi khi, nó được sử dụng khi một chức năng đơn giản hơn đã đủ (ví dụ apply
:), những lần khác, không thể biết chính xác nó đang làm gì nếu không dành một lượng thời gian hợp lý để xem qua khối mã mà nó ở trong.
Thực tế là tôi có thể tái tạo sweep
hiệu ứng của bằng cách sử dụng một hàm đơn giản hơn cho thấy rằng tôi không hiểu sweep
các trường hợp sử dụng cốt lõi của nó, và thực tế là hàm này được sử dụng thường xuyên cho thấy rằng nó khá hữu ích.
Bối cảnh:
sweep
là một hàm trong thư viện chuẩn của R; đối số của nó là:
sweep(x, MARGIN, STATS, FUN="-", check.margin=T, ...)
# x is the data
# STATS refers to the summary statistics which you wish to 'sweep out'
# FUN is the function used to carry out the sweep, "-" is the default
Như bạn có thể thấy, các đối số tương tự như apply
mặc dù sweep
yêu cầu thêm một tham số STATS
,.
Một điểm khác biệt chính khác là sweep
trả về một mảng có cùng hình dạng với mảng đầu vào, trong khi kết quả trả về apply
phụ thuộc vào hàm được truyền vào.
sweep
trong hành động:
# e.g., use 'sweep' to express a given matrix in terms of distance from
# the respective column mean
# create some data:
M = matrix( 1:12, ncol=3)
# calculate column-wise mean for M
dx = colMeans(M)
# now 'sweep' that summary statistic from M
sweep(M, 2, dx, FUN="-")
[,1] [,2] [,3]
[1,] -1.5 -1.5 -1.5
[2,] -0.5 -0.5 -0.5
[3,] 0.5 0.5 0.5
[4,] 1.5 1.5 1.5
Vì vậy, tóm lại, những gì tôi đang tìm kiếm là một hoặc hai trường hợp sử dụng mẫu cho sweep
.
Vui lòng không đọc lại hoặc liên kết đến Tài liệu R, danh sách gửi thư hoặc bất kỳ nguồn nào trong số các nguồn R 'chính' - giả sử tôi đã đọc chúng. Điều tôi quan tâm là cách các lập trình viên / nhà phân tích R có kinh nghiệm sử dụng sweep
trong mã riêng của họ.
apply
mà tôi có thể tìm ra cho kết quả này là một cái gì đó giống như t(apply(t(M), 2, "-", dx))
, nhưng điều đó khá khó chịu.