当我看一下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文档中的定义,我只是通过查找示例来学习的。