Коли я дивлюся на джерело пакетів R, я бачу, що функція sweep
використовується досить часто. Іноді його використовують, коли простішої функції вистачило б (наприклад, apply
), в інших випадках неможливо точно знати, що вона робить, не витрачаючи достатньо часу, щоб перейти через блок коду, в якому знаходиться.
Те, що я можу відтворити sweep
ефект за допомогою більш простої функції, говорить про те, що я не розумію sweep
основних випадків використання ядра, а той факт, що ця функція використовується так часто, говорить про те, що вона є досить корисною.
Контекст:
sweep
- функція в стандартній бібліотеці R; його аргументи:
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
Як бачимо, аргументи подібні, apply
хоча sweep
потрібен ще один параметр,STATS
.
Ще одна ключова відмінність полягає в тому, що sweep
повертає масив тієї ж форми , що і вхідний масив, тоді як результат повертаєтьсяapply
залежить від переданої функції.
sweep
в дії:
# 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
Отже, підсумовуючи, те, що я шукаю, є зразковим випадком використання або двома sweep
.
Будь ласка, не декламуйте та не посилайтеся на Документацію R, списки розсилки чи будь-який із "первинних" джерел R - припускайте, що я їх прочитав. Мене цікавить, як досвідчені програмісти R / аналітики використовують sweep
у власному коді.
apply
яке я можу зрозуміти для цього результату, - це щось на зразок t(apply(t(M), 2, "-", dx))
, але це досить неприємно.