当我看一下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

最佳答案

当按行或按列操作矩阵时,通常使用sweep(),并且该操作的其他输入是每行/列的不同值。与apply()一样,MARGIN定义是按行还是按列进行操作。我所谓的“另一个输入”所使用的值由STATS定义。
因此,对于每一行(或每一列),您将从STATS中获取一个值并用于FUN定义的操作中。

例如,如果要在定义的矩阵的第一行中添加1,在第二行中添加2,依此类推,则可以执行以下操作:

sweep (M, 1, c(1: 4), "+")

坦白地说,我只是不了解R文档中的定义,我只是通过查找示例来学习的。

10-04 15:02