当我查看 R Packages 的源代码时,我发现函数 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
返回的结果取决于传入的函数。
扫描
实际操作:
# 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()
通常用于按行或按列操作矩阵,并且操作的另一个输入是每行/列的不同值。是按行操作还是按列操作是由MARGIN定义的,如apply()
。用于我所谓的“其他输入”的值由 STATS 定义。
因此,对于每一行(或列),您将从 STATS 中获取一个值并在 FUN 定义的操作中使用。
例如,如果您想将 1 添加到您定义的矩阵的第一行,将 2 添加到第二行,依此类推,您将执行以下操作:
sweep (M, 1, c(1: 4), "+")
坦白说我也不明白R文档中的定义,我只是通过查找示例来了解的。
关于r - 如何使用 'sweep'函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444889/