Как использовать функцию «развертки»

Когда я смотрю на исходный код пакетов R, я вижу, что функция 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

Как видите, аргументы аналогичны аргументу применить , хотя развертка требует еще один параметр, 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 используют развертку в своем собственном коде.

95
задан Ben Bolker 19 April 2018 в 23:53
поделиться