Quando eu olho para a origem dos Pacotes R, vejo a função sweepusada com bastante frequência. Às vezes, é usado quando uma função mais simples seria suficiente (por exemplo, apply), outras vezes, é impossível saber exatamente o que está fazendo sem gastar um bom tempo para percorrer o bloco de código em que está.
O fato de eu poder reproduzir sweepo efeito de usando uma função mais simples sugere que não entendo sweepos principais casos de uso de, e o fato de que essa função é usada com tanta frequência sugere que é bastante útil.
O contexto:
sweepé uma função na biblioteca padrão de R; seus argumentos são:
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
Como você pode ver, os argumentos são semelhantes a applyembora sweeprequer mais um parâmetro STATS,.
Outra diferença importante é que sweepretorna um array da mesma forma que o array de entrada, enquanto o resultado retornado por applydepende da função passada.
sweep em ação:
# 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
Resumindo, o que estou procurando é um ou dois casos de uso exemplares sweep.
Por favor, não recite ou crie links para a Documentação R, listas de discussão ou qualquer uma das fontes 'primárias' de R - suponha que eu as li. Estou interessado em como programadores / analistas experientes em R usam sweepem seu próprio código.
applyque posso descobrir para este resultado é algo como t(apply(t(M), 2, "-", dx)), mas isso é muito desagradável.